当我尝试插入一个role
时,我得到一个错误。我已经找到了这个问题的一些解决方案,但它们不能解决我的问题:
- Integrity constraint violation: 1452 Cannot add or update a child row:
- Laravel SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row的
我试图从roles
表中获取id
到user_roles
表的roleID
列。这里我使用Laravel 5.2的Query Builder。
public function store(Request $request)
{
//
$role = [];
$role['role'] = $request->input('role');
$data= Role::create($role);
$id= $data->id;
DB::table('user_roles')->insert([
'roleID' => $id
]);
//return $data;
return redirect(route('allRole'));
}
字符串
当我插入任何角色时,它会在roles
表中插入新数据,但我在user_roles
表中没有得到roleID
。我得到一个错误:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails
(`amarjobs`.`user_roles`, CONSTRAINT `fkuserRolesuserID` FOREIGN KEY (`userID`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
(SQL: insert into `user_roles` (`roleID`) values (14))
型
我做的问题在哪里?
3条答案
按热度按时间pengsaosao1#
正如您所看到的,您的
user_roles
表需要userID
列&您在插入时没有传递该字段,这就是产生错误的原因。字符串
另外,我想提一下你用 Camel 大小写命名你的DB表列名的几件事,这是不好的,你应该使用下划线,因为数据库SQL通常不区分大小写,所以使用
userID
相当于userid
。此外,您正在使用
DB::insert
,它不会插入任何created_at
或updated_at
字段或其他雄辩的功能,所以我建议您插入使用eloquent model
和使用关系,这是laravel的美丽和雄辩的活动记录试着这样
型
在这里
$userdata = User::all();
你选择了所有的用户,你想让所有的用户都拥有这个角色,那么你必须循环并插入它。或者如果你想让第一个用户拥有这个角色,那么就可以了。另外,我建议你应该阅读更多的Laravels文档来弄清楚。
n3h0vuf22#
似乎你试图只插入
roleID
到user_roles
表。但在你给出的错误中,似乎user_roles
表也有userID
字段,这是外键,并与users
(id
)表连接。由于
user_roles
是一个pivot表,它有roleID
和userID
,并且都是外键。因此,当只插入roleID
值时,它试图插入具有NULL值的userID
,该值与user
表的任何ID都不匹配,这就是违反完整性约束的原因。因此,以正确的方式插入数据将是,您还必须提供VALID
userID
。字符串
我想,它会解决你的问题。
jfewjypa3#
在你上面的错误,你是失踪的
userID
字段,这是必须在关系的Angular .所以你应该通过userID
然后你的代码将工作.字符串
这里是使用关系方法的高级版本
在各个型号中添加这些方法
用户型号
型
榜样
型
这样做是为了插入角色。
型