首页 > 解决方案 > SQLSTATE[HY000]: 一般错误: 1005 Can't create table `test`.`members` (errno: 150 "Foreign key constraint is wrongly forms")

问题描述

我在 Laravel 中使用我的迁移来创建表之间的关系,我有 4 个表:用户、成员、成员技能和技能。我有用户表的以下代码:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
        $table->boolean('admin');
    });
}

成员表:

public function up()
{
    Schema::create('members', function (Blueprint $table) {
        $table->id();
        $table->timestamps();
        $table->string('name');
        $table->string('status');
        $table->date('date')->nullable();
        $table->text('project')->nullable();
        $table->date('start')->nullable();
        $table->foreign('name')->references('name')->on('users');
    });
}

member_skills 表:

public function up()
{
    Schema::create('member_skills', function (Blueprint $table) {
        $table->id();
        $table->timestamps();
        $table->string('name');
        $table->string('skill');
        $table->foreign('name')->references('name')->on('members');
    });
}

和技能表:

public function up()
{
    Schema::create('skills', function (Blueprint $table) {
        $table->id();
        $table->timestamps();
        $table->string('skill');
        $table->text('description');
        $table->foreign('skill')->references('skill')->on('member_skills');
    });
}

但是,运行我的迁移会导致(errno: 150 "Foreign key constraint is incorrectly formed"). 我已经读过更改迁移顺序应该可以解决问题,所以我按照用户、成员、成员技能和技能的顺序排列了要迁移的 4 个表,但我仍然收到同样的错误。还有什么我做错了吗?

标签: mysqldatabaselaraveleloquentdatabase-migration

解决方案


这是执行此操作的正确方法

public function up()
{
   Schema::create('members', function (Blueprint $table) {
      ...
      $table->unsignedBigInteger('user_id');
      $table->foreign('user_id')->references('id')->on('users');
   });
}

public function up()
{
   Schema::create('member_skills', function (Blueprint $table) {
      ...
      $table->unsignedBigInteger('member_id');
      $table->foreign('member_id')->references('id')->on('members');
   });
}

public function up()
{
   Schema::create('skills', function (Blueprint $table) {
      ...
      $table->unsignedBigInteger('member_skill_id');
      $table->foreign('member_skill_id')->references('id')->on('member_skills');
   });
}

更多:https ://laravel.com/docs/8.x/migrations#foreign-key-constraints


推荐阅读