外键约束在MySQL中的格式不正确:Laravel迁移

时间:2019-12-11 08:02:12

标签: php mysql laravel database-migration

我的迁移是

Schema::create('user_details', function (Blueprint $table) {
    $table->Increments('id')->unique();
    $table->text('detail');
    $table->text('value');
    $table->integer('user_id');
    $table->timestamps();

    $table->foreign('user_id')->references('id')->on('users');
});

Schema::create('users', function (Blueprint $table) {
    $table->Increments('id')->unique();
    $table->integer('user_detail_id');
    $table->integer('user_setting_id');
    $table->integer('company_id');
    $table->mediumText('role');
    $table->mediumText('email')->unique();
    $table->mediumText('password');
    $table->timestamps();
});

当我尝试迁移时,出现以下错误消息:

  

errno:150“外键约束格式不正确”(SQL:alter   表user_details添加约束user_details_user_id_foreign   外键(user_id)引用usersid))

为什么会这样?

1 个答案:

答案 0 :(得分:1)

您需要为表设置InnoDB存储引擎。您可以在模式生成器中进行操作:$table->engine = 'InnoDB';或在config/database.php文件(connections => mysql => engine)中:将'engine' => null,更改为'engine' => 'InnoDB',

第二个定义为$table->increments('id');的主键会自动递增 UNSIGNED INTEGER 。并且您的外键应为无符号整数。进一步了解creating columns

Schema::create('user_details', function (Blueprint $table) {
    $table->engine = 'InnoDB';

    $table->increments('id');
    $table->text('detail');
    $table->text('value');
    $table->unsignedInteger('user_id');
    $table->timestamps();

    $table->foreign('user_id')->references('id')->on('users');
});
Schema::create('users', function (Blueprint $table) {
    $table->engine = 'InnoDB';

    $table->increments('id');
    $table->integer('user_detail_id');
    $table->integer('user_setting_id');
    $table->integer('company_id');
    $table->mediumText('role');
    $table->mediumText('email')->unique();
    $table->mediumText('password');
    $table->timestamps();
});