这个 SQL 错误是什么意思?
What does this SQL error mean?
运行 Laravel 上的迁移时出现以下错误。当它到达更新用户 table.
的迁移部分时,似乎会出现错误
SQLSTATE[23000]: Integrity constraint violation: 1452
Cannot add or update a child row: a foreign key constraint fails
(`priatek`.`#sql-52e_a`, CONSTRAINT user_usertypeid_foreign` FOREIGN KEY
(userTypeId`) REFERENCES `UserType` (`userTypeId`))
(SQL: alter table `User` add constraint user_usertypeid_foreign foreign key
(`userTypeId`) references UserType` (`userTypeId`))
迁移
public function up()
{
Schema::create('UserType', function (Blueprint $table) {
$table->increments('userTypeId');
$table->string('name');
$table->string('description')->nullable();
$table->boolean('viewUser');
$table->boolean('viewSponsor');
$table->boolean('viewQuestion');
$table->boolean('createUser');
$table->boolean('createSponsor');
$table->boolean('createQuestion');
});
UserType::create([
'name' => 'Executive',
'viewUser' => 0,
'viewSponsor' => 1,
'viewQuestion' => 0,
'createUser' => 0,
'createSponsor' => 0,
'createQuestion' => 0,
]);
//more UserType creations...
Schema::table('User', function ($table) {
$table->integer('userTypeId')->unsigned();
$table->integer('operatorId')->unsigned();
$table->integer('sponsorId')->unsigned()->nullable();
$table->foreign('userTypeId')->references('userTypeId')->on('UserType');
});
// more unrelated stuff...
}
问题是当您将外键添加到 table 时,您的所有用户必须已经拥有有效的 userTypeId。但是因为你刚刚创建那个新列,所以他们不会有这个。
在创建外键之前,您必须确保所有用户都具有有效的用户类型(需要创建用户类型并为每个用户正确设置 userTypeId)。
所以您需要做的是将额外的列添加到 User
table,然后 运行 一些更新查询以确保所有用户都有他们的 userTypeId
设置,然后更新完成后添加外键。
运行 Laravel 上的迁移时出现以下错误。当它到达更新用户 table.
的迁移部分时,似乎会出现错误SQLSTATE[23000]: Integrity constraint violation: 1452
Cannot add or update a child row: a foreign key constraint fails
(`priatek`.`#sql-52e_a`, CONSTRAINT user_usertypeid_foreign` FOREIGN KEY
(userTypeId`) REFERENCES `UserType` (`userTypeId`))
(SQL: alter table `User` add constraint user_usertypeid_foreign foreign key
(`userTypeId`) references UserType` (`userTypeId`))
迁移
public function up()
{
Schema::create('UserType', function (Blueprint $table) {
$table->increments('userTypeId');
$table->string('name');
$table->string('description')->nullable();
$table->boolean('viewUser');
$table->boolean('viewSponsor');
$table->boolean('viewQuestion');
$table->boolean('createUser');
$table->boolean('createSponsor');
$table->boolean('createQuestion');
});
UserType::create([
'name' => 'Executive',
'viewUser' => 0,
'viewSponsor' => 1,
'viewQuestion' => 0,
'createUser' => 0,
'createSponsor' => 0,
'createQuestion' => 0,
]);
//more UserType creations...
Schema::table('User', function ($table) {
$table->integer('userTypeId')->unsigned();
$table->integer('operatorId')->unsigned();
$table->integer('sponsorId')->unsigned()->nullable();
$table->foreign('userTypeId')->references('userTypeId')->on('UserType');
});
// more unrelated stuff...
}
问题是当您将外键添加到 table 时,您的所有用户必须已经拥有有效的 userTypeId。但是因为你刚刚创建那个新列,所以他们不会有这个。
在创建外键之前,您必须确保所有用户都具有有效的用户类型(需要创建用户类型并为每个用户正确设置 userTypeId)。
所以您需要做的是将额外的列添加到 User
table,然后 运行 一些更新查询以确保所有用户都有他们的 userTypeId
设置,然后更新完成后添加外键。