SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败 - Laravel
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败 - Laravel相关的知识,希望对你有一定的参考价值。
我知道这个问题已被提出,但我仍然无法找到我做错的事。
我正在使用Laravel框架。
我有2个表(用户和位置)。当我想创建一个用户时,我收到错误消息:
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
)值(?,?,?))(Bindings:array(0 =>'1',1 =>'test@hotmail.com',2 =>'1', ))
表用户
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;
表位置
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;
迁移用户
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');
});
}
迁移地点
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');
});
}
模型用户
public function location()
{
return $this->belongsTo('Location');
}
型号位置
public function user()
{
return $this->hasOne('User');
}
调节器
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();
}
我似乎无法找到我做错的事。显然外键有问题。
用户行需要对有效位置的引用。在保存用户之前,该位置必须可用。因此,首先保存位置,然后保存用户并取消注释$user->location_id
线,您就完成了。
那些面临此错误的开发人员:
SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行: 外键约束失败(
laravel
.articles
,CONSTRAINTarticles_user_id_foreign
FOREIGN KEY(user_id
)REFERENCESusers
(id
)DELETE CASCADE) (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]:完整性约束违规:1452无法添加或更新子行: 外键约束失败(laravel
.articles
,CONSTRAINTarticles_user_id_foreign
FOREIGN KEY(user_id
)REFERENCESusers
(id
)DELETE CASCADE) (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]:完整性约束违规:1452无法添加或更新子行:外键约束失败 - Laravel的主要内容,如果未能解决你的问题,请参考以下文章
SQLSTATE[23000]:完整性约束违规 1452 无法添加或更新子行:外键约束失败
Innobyte 插件问题:SQLSTATE [23000]:完整性约束违规:1452 无法添加或更新子行
SQLSTATE [23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败
Laravel:正确保存后返回重定向抛出 SQLSTATE [23000]:完整性约束违规
SQLSTATE [23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败 - Laravel
Laravel 7 错误 - SQLSTATE [23000]:完整性约束违规:1048 列 'first_name' 不能为空