[英]SQLSTATE[HY000]: General error: 1005 Can't create table `school`.`posts` (errno: 150 "Foreign key constraint is incorrectly formed")
[英]Laravel 5.4: SQLSTATE[HY000]: General error: 1005 Can't create table "Foreign key constraint is incorrectly formed"
我正在使用Laravel 5.4並添加了此遷移:
public function up()
{
Schema::create('episodes', function (Blueprint $table) {
$table->increments('id');
$table->integer('course_id')->unsigned();
$table->foreign('course_id')->references('id')->on('courses')->onDelete('cascade');
$table->string('type', 10);
$table->string('title');
$table->string('slug');
$table->text('description');
$table->text('body');
$table->string('videoUrl');
$table->string('tags');
$table->string('time', 15)->default('00:00:00');
$table->integer('number');
$table->integer('viewCount')->default(0);
$table->integer('commentCount')->default(0);
$table->integer('downloadCount')->default(0);
$table->timestamps();
});
}
現在,當我運行php artisan migrate
時,我收到此錯誤:
SQLSTATE[HY000]:一般錯誤:1005 Can't create table elearning
。 episodes
(errno:150“外鍵約束形成錯誤”)(SQL:alter table episodes
添加約束episodes_course_id_foreign
外鍵( course_id
)在刪除級聯時引用courses
( id
))
我也試過這個,但仍然得到同樣的錯誤:
$table->unsignedBigInteger('course_id');
那么我怎樣才能正確運行這個遷移呢? 我真的被這個困住了,請幫助我......
用戶遷移:
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('level')->default('user');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
課程遷移:
Schema::create('courses', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->string('type', 10);
$table->string('title');
$table->string('slug');
$table->text('description');
$table->text('body');
$table->string('price',50);
$table->string('imageUrl');
$table->string('tags');
$table->string('time', 15)->default('00:00:00');
$table->integer('viewCount')->default(0);
$table->integer('commentCount')->default(0);
$table->timestamps();
});
而不是使用:
$table->increments('id');
你應該使用:
$table->id();
(這更容易)。
建立你的對外關系,而不是擁有
$table->integer('course_id')->unsigned();
$table->foreign('course_id')->references('id')->on('courses')->onDelete('cascade');
你可以使用:
$table->foreignId('course_id')->constrained()->cascadeOnDelete();
這將自動創建正確類型的列(無符號大整數),然后通過在課程表上查找 id 列來創建關系。
編輯
由於您使用的是舊版本的 Laravel,因此您不能使用 id() function,因此只需將 course_id 列創建為大 integer:
$table->bigInteger('course_id')->unsigned();
然后像以前一樣建立你們的關系。
一個問題可能是您沒有將 unsignedBigInteger 作為 course_id
Schema::create('episodes', function (Blueprint $table) {
$table->increments('id');
$table->unsignedBigInteger('course_id')->index('course_id');
$table->string('type', 10);
$table->string('title');
$table->string('slug');
$table->text('description');
$table->text('body');
$table->string('videoUrl');
$table->string('tags');
$table->string('time', 15)->default('00:00:00');
$table->integer('number');
$table->integer('viewCount')->default(0);
$table->integer('commentCount')->default(0);
$table->integer('downloadCount')->default(0);
$table->timestamps();
$table->index( [ 'created_at', 'updated_at' ] );
//Constraint
$table->foreign('course_id')->references('id')->on('courses')->onDelete('cascade');
});
或者
第二個問題可能是你沒有讓你的遷移不是 ruing 順序,例如,首先需要運行用戶表,然后是課程,然后是情節
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.