首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel-4迁移中的访问冲突错误

Laravel-4迁移中的访问冲突错误
EN

Stack Overflow用户
提问于 2013-12-19 05:59:36
回答 2查看 1.9K关注 0票数 0

我有以下移民:

create_users_table.php

代码语言:javascript
复制
class CreateUsersTable extends Migration {
    public function up()
    {
        Schema::create('users', function(Blueprint $table) {
            $table->increments('id');
            $table->string('name', 255);
            $table->string('username', 64)->unique();
            $table->string('email', 255)->unique();
            $table->string('password',64);
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::drop('users');
    }

}

create_predictions_table.php

代码语言:javascript
复制
class CreatePredictionsTable extends Migration {
    public function up()
    {
        Schema::create('predictions', function(Blueprint $table) {
            $table->increments('id');
        $table->integer('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users');
        $table->integer('fixture_id')->unsigned();
        $table->foreign('fixture_id')->references('id')->on('fixtures');
        $table->integer('home_team_score_prediction');
        $table->integer('away_team_score_prediction');
        $table->timestamps();
        });
    }
    public function down()
    {
        Schema::drop('predictions');
    }
}

create_fixtures_table.php

代码语言:javascript
复制
class CreateFixturesTable extends Migration {
    public function up()
    {
        Schema::create('fixtures', function(Blueprint $table) {
            $table->increments('id');
            $table->integer('home_team_id');
            $table->integer('away_team_id');
            $table->dateTime('date');
            $table->string('venue');
            $table->timestamps();
        });
    }
    public function down()
    {
        Schema::drop('fixtures');
    }
}

最初,当我运行迁移时使用

代码语言:javascript
复制
 php artisan migrate

我没有加外键。我跑了

代码语言:javascript
复制
php artisan migrate:refresh

在添加了外键约束之后,出现了以下错误:

代码语言:javascript
复制
SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'predictions' already exists (SQL: create table `predictions` (`id` int unsigned not null auto_increment primary key, `user_id` int unsigned not null, `fixture_id` int
  unsigned not null, `home_team_score_prediction` int not null, `away_team_score_prediction` int not null, `created_ at` timestamp default 0 not null, `updated_at` timestamp default 0 not null) default character set utf8 collate utf8_unicode_ci)

我认为这是因为表已经存在(尽管刷新应该回滚迁移并再次运行)

当我试图回滚时

代码语言:javascript
复制
php artisan migrate:rollback

我得到了以下信息:

代码语言:javascript
复制
 [Illuminate\Database\QueryException]
  SQLSTATE[23000]: Integrity constraint violation: 1217 Cannot delete or update a parent row: a foreign key constrain t fails (SQL: drop table `users`)

我哪里出问题了?我对迁移很陌生,所以这些可能是初学者通常会犯的错误。但我不明白我到底做错了什么。我希望有人能帮我。

EN

回答 2

Stack Overflow用户

发布于 2015-01-08 03:13:57

移徙将继续下去,直到遇到一些问题。因此,可能已经添加了外键,但由于错误,它的关联表尚未创建。如果您试图回滚,迁移将假定存在与外键关联的表,并且它也将尝试回滚该表。

但是,该表不存在!

最简单的方法是清空数据库并重新运行迁移。我以前遇到过这个问题,一旦出现这样的问题就很难一步一步地回滚。

票数 1
EN

Stack Overflow用户

发布于 2015-01-08 01:49:05

我做了什么--,有一张拉拉维尔的migrations表。Truncate或空表,然后删除与迁移相关的所有表。如果可能的话,首先删除外键的约束,然后再删除表。

你应该可以再次迁移了。

加法

注意down()函数中表的删除顺序。

删除onDelete()声明的一些具有引用约束的表肯定需要首先删除约束。

我认为这是导致回滚错误的原因。

多看看你的迁徙吧,伙计:-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20674446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档