我首先创建了没有外键的所有表,然后我为每个表添加了外键,从第一个表开始,我收到了这个错误:
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
所以当我删除并重新迁移时,我得到第一个错误
发生了什么事?
答案 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()(主键和外键)。