我正在尝试使用Laravel 5.8为“用户”表创建外键。
Laravel 5.8自动生成的迁移表如下,
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
然后从我的“存储库”表中,按如下方式引用“用户”表,
Schema::create('repositories', function (Blueprint $table) {
$table->string('id', 8)->primary();
$table->string('name')->nullable(false);
$table->string('size')->nullable(false);
$table->unsignedInteger('user_id')->nullable(false);
$table->timestamps();
});
Schema::table('repositories', function (Blueprint $table) {
$table->foreign('user_id')->references('id')->on('users');
});
但是我在此代码上收到“常规错误:1215无法添加外键约束”错误。有很多与此问题相关的解决方案。
General error: 1215 Cannot add foreign key constraint in laravel
Migration: Cannot add foreign key constraint in laravel
Laravel migration "Cannot add foreign key constraint" error with MySQL database
我已经尝试了上述解决方案。但是我的问题没有解决
答案 0 :(得分:2)
尝试一下
Schema::create('repositories', function (Blueprint $table) {
$table->string('id', 8)->primary();
$table->string('name')->nullable(false);
$table->string('size')->nullable(false);
$table->unsignedBigInteger('user_id');
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users');
});
根据laravel 5.8 Foreign Key Constraints
Schema::table('posts', function (Blueprint $table) {
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
});
答案 1 :(得分:0)
可能是因为user_id列与id列不匹配。
user_id必须为bigInteger类型,并且也要建立索引。
参考:Setting a foreign key bigInteger to bigIncrements in Laravel 5.4
答案 2 :(得分:0)
从Laravel 5.8开始,使用bigIncrements代替主键的增量。如果将bigIncrements用作主键,则必须将user_id字段声明为bigInteger而不是integer。这样,主键和外键的字段将共享相同类型的数据,否则会出现错误