[英]SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails - Laravel
I know that this question has already been asked, but I still can't find what I'm doing wrong.我知道这个问题已经被问过了,但我仍然找不到我做错了什么。
I'm using the framework Laravel.我正在使用框架 Laravel。
I have 2 tables (Users and Locations).我有 2 个表(用户和位置)。 When I want to create a User, I get the error message:
当我想创建用户时,我收到错误消息:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (
festival_aid
.users
, CONSTRAINTfk_users_locations1
FOREIGN KEY (location_id
) REFERENCESlocations
(location_id
) ON DELETE CASCADE ON UPDATE NO ACTION) (SQL: insert intousers
(user_id
,user_email
,location_id
) values (?, ?, ?)) (Bindings: array ( 0 => '1', 1 => 'test@hotmail.com', 2 => '1', ))SQLSTATE[23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败(
festival_aid
users
,CONSTRAINTfk_users_locations1
FOREIGN KEY (location_id
) REFERENCESlocations
(location_id
) ON DELETE CASCADE ON UPDATE NO ACTION)(SQL :插入users
(user_id
,user_email
,location_id
)值(?,?,?))(绑定:数组( 0 => '1',1 => 'test@hotmail.com',2 => '1', ))
Table Users表用户
CREATE TABLE IF NOT EXISTS `festival_aid`.`users` (
`user_id` BIGINT NOT NULL AUTO_INCREMENT,
`user_email` VARCHAR(45) NOT NULL,
`user_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`user_modified` TIMESTAMP NULL,
`user_deleted` TIMESTAMP NULL,
`user_lastlogin` TIMESTAMP NULL,
`user_locked` TIMESTAMP NULL,
`location_id` BIGINT NOT NULL,
PRIMARY KEY (`user_id`),
UNIQUE INDEX `user_email_UNIQUE` (`user_email` ASC),
CONSTRAINT `fk_users_locations1`
FOREIGN KEY (`location_id`)
REFERENCES `festival_aid`.`locations` (`location_id`)
ON DELETE CASCADE
ON UPDATE NO ACTION,
ENGINE = InnoDB;
Table Locations表位置
DROP TABLE IF EXISTS `festival_aid`.`locations` ;
CREATE TABLE IF NOT EXISTS `festival_aid`.`locations` (
`location_id` BIGINT NOT NULL AUTO_INCREMENT,
`location_latitude` FLOAT NOT NULL,
`location_longitude` FLOAT NOT NULL,
`location_desc` VARCHAR(255) NULL,
`location_type` VARCHAR(45) NULL,
PRIMARY KEY (`location_id`))
ENGINE = InnoDB;
Migration User迁移用户
public function up()
{
Schema::table('users', function(Blueprint $table)
{
$table->increments('user_id');
$table->string('user_email');
$table->timestamp('user_created');
$table->timestamp('user_modified');
$table->timestamp('user_deleted');
$table->timestamp('user_lastlogin');
$table->timestamp('user_locked');
$table->foreign('location_id')
->references('id')->on('locations');
//->onDelete('cascade');
});
}
Migration Location迁移地点
public function up()
{
Schema::table('locations', function(Blueprint $table)
{
$table->primary('location_id');
$table->float('location_latitude');
$table->float('location_longitude');
$table->string('location_desc');
$table->string('location_type');
});
}
Model User Model 用户
public function location()
{
return $this->belongsTo('Location');
}
Model Location Model 位置
public function user()
{
return $this->hasOne('User');
}
Controller Controller
public function store()
{
$input = Input::all();
$rules = array('user_email' => 'required|unique:users|email');
$v = Validator::make($input, $rules);
if($v->passes())
{
$user = new User();
$location = new Location();
$user->user_email = $input['user_email'];
//$user->location_id = $input['location_id'];
$location->location_latitude = $input['location_latitude'];
$location->location_longitude = $input['location_longitude'];
$user->save();
$location->save();
}
I can't seem to find what I'm doing wrong.我似乎找不到我做错了什么。 Obviously there is something wrong with the foreign key.
显然外键有问题。
A user row needs a reference to a valid location. 用户行需要对有效位置的引用。 That location must be available before the user is saved.
在保存用户之前,该位置必须可用。 So, first save the location and then save the user and uncomment the
$user->location_id
line and you are done. 因此,首先保存位置,然后保存用户并取消注释
$user->location_id
行,您就完成了。
Those Developers who face this error: 那些面临此错误的开发人员:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row:
SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:
a foreign key constraint fails (laravel
.articles
, CONSTRAINTarticles_user_id_foreign
FOREIGN KEY (user_id
) REFERENCESusers
(id
) ON DELETE CASCADE)外键约束失败(
laravel
。articles
,CONSTRAINTarticles_user_id_foreign
FOREIGN KEY(user_id
)REFERENCESusers
(id
)ON DELETE CASCADE)
(SQL: insert intoarticles
(title
,user_id
,body
,updated_at
,created_at
) values (rao, 1, sflkkjk, 2016-03-01 20:45:32, 2016-03-01 20:45:32))(SQL:插入
articles
(title
,user_id
,body
,updated_at
,created_at
)值(rao,1,sflkkjk,2016-03-01 20:45:32,2016-03-01 20:45:32))
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row:SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:
a foreign key constraint fails (laravel
.articles
, CONSTRAINTarticles_user_id_foreign
FOREIGN KEY (user_id
) REFERENCESusers
(id
) ON DELETE CASCADE)外键约束失败(
laravel
。articles
,CONSTRAINTarticles_user_id_foreign
FOREIGN KEY(user_id
)REFERENCESusers
(id
)ON DELETE CASCADE)
(SQL: insert intoarticles
(title
,user_id
,body
,updated_at
,created_at
) values (rao, 1, sflkkjk, 2016-03-01 20:45:32, 2016-03-01 20:45:32))(SQL:插入
articles
(title
,user_id
,body
,updated_at
,created_at
)值(rao,1,sflkkjk,2016-03-01 20:45:32,2016-03-01 20:45:32))
First Save the user record of user then try to insert record then easily inserted into the database. 首先保存用户的用户记录然后尝试插入记录然后轻松插入数据库。
KEY POINT 关键点
Two Tables: one is article and other is user. 两个表:一个是文章,另一个是用户。 A user has many articles but no article has many users.
用户有很多文章,但没有文章有很多用户。 So foreign key is shifted toward the article table.
所以外键转移到文章表。 If user table has no record then you face the same error seen earlier.
如果用户表没有记录,那么您将面临前面看到的相同错误。
By doing this we can easily solve this issue. 通过这样做,我们可以轻松解决此问题。
If user table has no record then you face the same error seen earlier.如果用户表没有记录,那么您将面临前面看到的相同错误。 you may set any default value before running migration
您可以在运行迁移之前设置任何默认值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.