无法添加外键约束Laravel 5.1

时间:2016-03-05 14:02:09

标签: laravel laravel-5.1

我首先创建了没有外键的所有表,然后我为每个表添加了外键,从第一个表开始,我收到了这个错误:

SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL
  : alter table `accounts` add constraint accounts_client_id_foreign foreign
  key (`client_id`) references `clients` (`id`))

这是我的代码:

public function up()
    {
        Schema::create('accounts', function(Blueprint $table)
        {
        $table->engine = 'InnoDB';

        $table->bigInteger('id');

        $table->integer('client_id')->unsigned();
        $table->foreign('client_id')->references('id')->on('clients');

        $table->integer('emp_id')->unsigned();
        $table->foreign('emp_id')->references('id')->on('employees');

        $table->string('type');

        $table->timestamps();
    });
}

我试过没有$ table-> engine ='innoDB';但同样的错误

另外,我试图分开外键:

Schema::table('accounts', function($table) {
        $table->foreign('client_id')->references('id')->on('clients');
        $table->foreign('emp_id')->references('id')->on('employees');
    });

我收到了这个错误:

Base table or view already exists: 1050 Table 'accounts' already exists

所以当我删除并重新迁移时,我得到第一个错误

发生了什么事?

2 个答案:

答案 0 :(得分:0)

我有同样的错误,感觉就像是我的错误。我所做的是为外键创建了不同的迁移。因此,首先使用字段创建表,然后(在下一个日期迁移中)添加外键。

然后我回滚了所有迁移并用php artisan migrate重新启动了它们。它对我有用,我希望它也适合你。

答案 1 :(得分:0)

我预见你创建了相关表(“clients”),指定主键/ id为

$table->bigInteger('id'); 

$table->integer('id'); 

这将导致您的外键约束的问题 被指定为

$表 - >整数( '的client_id') - >无符号();

而主键/ id没有分配 unsigned()约束。

因此,请将相关表的主键更改为

$table->bigInteger('id')->unsigned(); 

$table->integer('id')->unsigned(); 

如果您使用 bigInteger 作为主键,请尝试使用 bigInteger 作为foerign键。不要忘记使用 unsigned()(主键和外键)。