Laravel "Cannot add foreign key constraint" - 迁移
Laravel "Cannot add foreign key constraint" - Migrate
我的外键有问题。
我有一个用户有性别:
我的迁移用户:
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('nom');
$table->string('prenom');
$table->string('adresse');
$table->integer('cp');
$table->string('ville');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
$table->tinyInteger('admin')->nullable();
});
Schema::table('users', function ($table) {
$table->integer('sexe_id')->unsigned();
$table->foreign('sexe_id')->references('id')->on('sexes');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('users');
}`
我的性别迁移:
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('sexes', function (Blueprint $table) {
$table->increments('id');
$table->string('libelle');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('sexes');
}
我的性别播种机:
class SexesTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('sexes')->insert([
[
'libelle' => 'Homme',
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
],
[
'libelle' => 'Femme',
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
]
]);
}
}
我的用户播种机:
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('users')->insert([
[
'name' => 'admin',
'nom' => 'Virlois',
'prenom' => 'Peter',
'sexe_id' => 1,
'email' => 'admin@admin.fr',
'adresse' => '12 rue Jean Rostand',
'cp' => 90000,
'ville' => 'Belfort',
'password' => bcrypt('admin123'),
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
'admin' => 1,
],
[
'name' => 'test',
'nom' => 'Mennegain',
'prenom' => 'Mathieu',
'sexe_id' => 1,
'email' => 'test@test.fr',
'adresse' => '12 rue Jean Rostand',
'cp' => 90000,
'ville' => 'Belfort',
'password' => bcrypt('test123'),
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
'admin' => 0,
]
]);
}
}
我的数据库播种器:
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->call(SexesTableSeeder::class);
$this->call(UsersTableSeeder::class);
$this->call(SaisonTableSeeder::class);
$this->call(ProduitTypeSeeder::class);
$this->call(SportsTableSeeder::class);
$this->call(ProduitsTableSeeder::class);
}
}
当我 运行 : php artisan migrate:refresh -seed
我有这个错误:
[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL
: alter table `users` add constraint `users_sexe_id_foreign` foreign key (`
sexe_id`) references `sexes` (`id`))
[PDOException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
sexes
table 和 sexe_id
=> 1 中的 id
1 可能没有任何内容生成此错误。在您的 UsersTableSeeder
而不是硬编码 'sexe_id' => 1
中查询您的 sexes
table 任何行并使用该动态 id
.
迁移的顺序非常重要。根据您发布的内容,您 运行 首先进行用户迁移,然后在同一迁移中尝试创建用户 table 并更改 table。另一个 table sexes
不存在
($table->foreign('sexe_id')->references('id')->on('sexes');)
所以这就是你得到错误的原因。
我建议分离迁移以便 运行 用户、性别、更改用户或性别、用户和更改在同一迁移中,但这不是做事的好方法,我的意思是混合迁移(创建和更改)。
我的外键有问题。 我有一个用户有性别:
我的迁移用户:
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('nom');
$table->string('prenom');
$table->string('adresse');
$table->integer('cp');
$table->string('ville');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
$table->tinyInteger('admin')->nullable();
});
Schema::table('users', function ($table) {
$table->integer('sexe_id')->unsigned();
$table->foreign('sexe_id')->references('id')->on('sexes');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('users');
}`
我的性别迁移:
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('sexes', function (Blueprint $table) {
$table->increments('id');
$table->string('libelle');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('sexes');
}
我的性别播种机:
class SexesTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('sexes')->insert([
[
'libelle' => 'Homme',
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
],
[
'libelle' => 'Femme',
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
]
]);
}
}
我的用户播种机:
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('users')->insert([
[
'name' => 'admin',
'nom' => 'Virlois',
'prenom' => 'Peter',
'sexe_id' => 1,
'email' => 'admin@admin.fr',
'adresse' => '12 rue Jean Rostand',
'cp' => 90000,
'ville' => 'Belfort',
'password' => bcrypt('admin123'),
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
'admin' => 1,
],
[
'name' => 'test',
'nom' => 'Mennegain',
'prenom' => 'Mathieu',
'sexe_id' => 1,
'email' => 'test@test.fr',
'adresse' => '12 rue Jean Rostand',
'cp' => 90000,
'ville' => 'Belfort',
'password' => bcrypt('test123'),
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
'admin' => 0,
]
]);
}
}
我的数据库播种器:
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->call(SexesTableSeeder::class);
$this->call(UsersTableSeeder::class);
$this->call(SaisonTableSeeder::class);
$this->call(ProduitTypeSeeder::class);
$this->call(SportsTableSeeder::class);
$this->call(ProduitsTableSeeder::class);
}
}
当我 运行 : php artisan migrate:refresh -seed
我有这个错误:
[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL
: alter table `users` add constraint `users_sexe_id_foreign` foreign key (`
sexe_id`) references `sexes` (`id`))
[PDOException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
sexes
table 和 sexe_id
=> 1 中的 id
1 可能没有任何内容生成此错误。在您的 UsersTableSeeder
而不是硬编码 'sexe_id' => 1
中查询您的 sexes
table 任何行并使用该动态 id
.
迁移的顺序非常重要。根据您发布的内容,您 运行 首先进行用户迁移,然后在同一迁移中尝试创建用户 table 并更改 table。另一个 table sexes
不存在
($table->foreign('sexe_id')->references('id')->on('sexes');)
所以这就是你得到错误的原因。
我建议分离迁移以便 运行 用户、性别、更改用户或性别、用户和更改在同一迁移中,但这不是做事的好方法,我的意思是混合迁移(创建和更改)。