当我尝试插入role
时出现错误。我在 StackOverFlow 中找到了这个问题的解决方案,但所有这些都无法解决我的问题。
我正试图将id
从roles
表格转移到roleID
表格的user_roles
列。我正在使用 Query Builder Laravel 5.2。
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
表中插入新数据,但我在roleID
表中没有user_roles
。我收到错误:
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))
我遇到的问题在哪里?提前致谢。 搜索结果:
答案 0 :(得分:1)
您似乎正在尝试仅将roleID
插入user_roles
表。
但是在你给定的错误中,似乎user_roles
TABLE还有userID
字段是什么是外键并且与users
(id
)表连接。
由于user_roles
是一个数据透视表,它同时包含roleID
和userID
,并且都是外键。因此,在仅使用roleID
值进行插入时,它会尝试插入具有NULL值的userID
与user
不匹配的表,这就是为什么完整性约束违反的ID。
因此,以正确的方式插入数据,您必须提供有效的userID
。
$id= $data->id;
DB::table('user_roles')->insert([
'roleID' => $id,
'userID' => $EXISTING_USER_ID
]);
我想,它会解决你的问题。
答案 1 :(得分:1)
您可以看到user_roles
表格需要userID
列&在插入产生错误的内容时,你没有通过字段。
DB::table('user_roles')->insert([
'roleID' => $id,
'userID' => $userId, //pass your userID here
]);
另外,我想提一下你在camel case中命名你的数据库表列名称的一些事情,这很糟糕你应该使用下划线&因为db sqls通常不区分大小写,因此使用userID
等同于userid
。
您还在使用DB::insert
它不会插入任何created_at
或updated_at
字段或其他雄辩的功能,因此我建议您使用eloquent model
&使用关系是laravel&的美丽雄辩的活跃记录
试试这个
public function store(Request $request)
{
//
$role = [];
$role['role'] = $request->input('role');
$data= Role::create($role);
$userdata = User::all();
$user_id = $userdata->first()->id;
$id= $data->id;
DB::table('permissions')->insert([
'role_id' => $id
]);
DB::table('user_roles')->insert([
'roleID' => $id,
'userID' => $user_id
]);
//return $data;
return redirect(route('allRole'));
}
这里$userdata = User::all();
你选择所有用户你想让你所有人都拥有这个角色然后你必须在它上面循环播放它。插入它。或者,如果您希望第一个用户拥有此角色,那就没关系。
另外,我建议您应该阅读更多Laravels文档以清除内容。
答案 2 :(得分:0)
在上面的错误中,您错过了userID
字段,这在关系视角中是必须的。因此,您应该通过userID
,然后您的代码将正常运行。
$role = [];
$role['role'] = $request->input('role');
$data= Role::create($role);
$id= $data->id;
DB::table('user_roles')->insert([
'roleID' => $id,
'userID'=>1, // pass userID with whom you wan to attach new roleID
]);
return redirect(route('allRole'));
这是使用关系方法的高级版本
在相应的模型中添加这些方法
用户模型
public function userRoles(){
return $this->belongsToMany('App\Role','user_roles','userID','roleID');
}
榜样
public function roleUsers(){
return $this->belongsToMany('App\User','user_roles','roleID', 'userID');
}
并执行此操作以插入角色。
$user = App\User::find(1);
$user->roles()->attach($roleId);
$role = [];
$role['role'] = $request->input('role');
$data= Role::create($role);
$id= $data->id;
$user->userRoles()->attach(['
'roleID' => $id,
'userID'=>$user->id
']);
return redirect(route('allRole'));