我正在尝试在laravel 5.8中创建外键约束

时间:2019-08-11 14:30:10

标签: laravel-5.8

我无法创建外表键:

$table->increments('rt_id');
$table->integer('issued_id')->unsigned();
$table->foreign('issued_id')->references('issue_id')->on('book_issues');            
$table->integer('book_id')->unsigned();
$table->foreign('book_id')->references('id')->on('book_details');            

我也尝试过:

$table->bigIncrements('rt_id'); 
$table->unsignedBigInteger('issued_id');  
$table->foreign('issued_id')->references('issue_id')->on('book_issues');                
$table->unsignedBigInteger('book_id');
$table->foreign('book_id')->references('id')->on('book_details');

2 个答案:

答案 0 :(得分:0)

查看两个表,我发现为了获得成功的外键... 被引用字段和引用字段必须具有完全相同的数据类型和选项

因此,在您的情况下,应删除unsignedBigIntegerunsigned,只需使用integer,如下所示:

$table->integer('issued_id')

让我知道这是否对您有用

答案 1 :(得分:0)

我刚刚重新检查了所有字段和数据类型,观察到我对主键使用了增量,而在外键中我采用了integer('book_id')-> unsigned() 并且在迁移时,我已经迁移了主表,因此,我使用了php artisan migrate:fresh命令,这一次,它正在迁移外部表时间,因此,我得到了错误。  在首先放置我的外键表,然后最后放置主键表之前。 因此,我更改了模型名称,并根据关键约束进行了替换,因为主表应首先存储在迁移文件夹中,即使有时在迁移时它不会按顺序在ur文件夹中迁移。 所以,我用php artisan migration:fresh 此命令将按顺序迁移所有表。