外键约束错误地形成了laravel
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了外键约束错误地形成了laravel相关的知识,希望对你有一定的参考价值。
当我想用migrate
和migrate:fresh
命令迁移我的迁移时,我得到了This Error
这些是我的迁移:
public function up()
{
Schema::create('notes', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned()->index();
$table->integer('card_id')->unsigned()->index();
$table->text('body');
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->foreign('card_id')->references('id')->on('card')->onDelete('cascade');
});
}
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('username');
$table->string('email');
$table->string('password');
$table->timestamps();
});
}
public function up()
{
Schema::create('cards', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->timestamps();
});
}
我只是尝试了什么,我不知道我该怎么办[我是laravel的初学者]
答案
基本上您的notes表是在users表之前创建的,因此是外键错误。它可以找到users表,因为它不存在(还)
Laravel按顺序迁移,因此有2个hacks来解决这个问题:
- 更改用户迁移文件的时间戳,以便首先执行
- 更常见的黑客攻击是完全针对外键关系进行单独迁移。然后更改时间戳,使其最后执行。这样,您就知道在执行fk迁移时所有表都将存在
另一答案
您需要更改迁移文件中的日期和时间,因此在cards
表之前创建了users
和notes
表。
另一答案
首先要确保在cards
之前创建users
和notes
。
另外代替:
$table->foreign('card_id')->references('id')->on('card')->onDelete('cascade');
使用:
$table->foreign('card_id')->references('id')->on('cards')->onDelete('cascade');
(你有card
而不是cards
)
以上是关于外键约束错误地形成了laravel的主要内容,如果未能解决你的问题,请参考以下文章
MySQL创建表:错误1005 errno:150“外键约束形成错误”