SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint Laravel 5.8
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint Laravel 5.8
我正在尝试使用 Laravel 5.8.
为 "users" table 创建一个外键
Laravel 5.8自动生成的迁移table如下,
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();
});
}
然后从我的 "repositories" table 我引用 "users" table 如下,
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');
});
但是我在这段代码上遇到 "General error: 1215 Cannot add foreign key constraint" 错误。有很多与此问题相关的解决方案。
Migration: Cannot add foreign key constraint in laravel
我已经尝试过上述解决方案。但是我的问题没有解决
试试这个
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.8Foreign Key Constraints
Schema::table('posts', function (Blueprint $table) {
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
});
可能是因为user_id列与id列不匹配
user_id 需要是 bigInteger 类型并且也被索引。
参考:
从 Laravel 5.8 开始,使用 bigIncrements 代替主键的增量。如果您使用 bigIncrements 作为主键,则必须将 user_id 字段声明为 bigInteger 而不是整数。这样主键和外键的字段就会共享同一类型的数据,否则会报错
我正在尝试使用 Laravel 5.8.
为 "users" table 创建一个外键Laravel 5.8自动生成的迁移table如下,
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();
});
}
然后从我的 "repositories" table 我引用 "users" table 如下,
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');
});
但是我在这段代码上遇到 "General error: 1215 Cannot add foreign key constraint" 错误。有很多与此问题相关的解决方案。
Migration: Cannot add foreign key constraint in laravel
我已经尝试过上述解决方案。但是我的问题没有解决
试试这个
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.8Foreign Key Constraints
Schema::table('posts', function (Blueprint $table) {
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
});
可能是因为user_id列与id列不匹配
user_id 需要是 bigInteger 类型并且也被索引。
参考:
从 Laravel 5.8 开始,使用 bigIncrements 代替主键的增量。如果您使用 bigIncrements 作为主键,则必须将 user_id 字段声明为 bigInteger 而不是整数。这样主键和外键的字段就会共享同一类型的数据,否则会报错