php - 如果用户已经使用 Laravel 分配,如何限制同一用户分配在一个组中
问题描述
这是我的身体要求:
{
"id": "1",
"group_members": [96,97]
}
这里 id 1 是组 id,group_members 96 和 97 是用户 id,我为用户 96 和 97 分配了组 id 1,当我尝试再次分配具有相同 id 为 96 和 97 的用户时,它不应该分配它应该显示消息该用户已分配有此组 ID
我怎样才能做到这一点:我还与你们共享了代码:
您的帮助将不胜感激!
try{
$request->request->add(['created_by' => Auth::user()->id]);
$groupMembers = Group::where('id', $request->get('id'))->first();
$groupMembers->users()->attach($request->get('group_members', []));
DB::commit();
return response([
'status' => true,
'message' => 'Group members added',
], 200);
} catch(\Exception $ex) {
DB::rollback();
return response([
'status' => false,
'message' => __('messages.validation_errors'),
'errors' => $ex->getMessage(),
], 500);
}
解决方案
一种简单的方法是使用syncWithoutDetaching
自动附加未附加用户并忽略已附加用户的方法。
$groupMembers->users()->syncWithoutDetaching($request->get('group_members'));
但是,如果您确实需要显示错误消息,则应该使用以下方法:
$associatedUsers = $groupMembers->users()->whereIn('users.id', $request->get('group_members'))->pluck('users.id'); // It'll give all attached user IDs
if(!$unAssociatedUserIds = array_diff($request->get('group_members'), $associatedUsers)) {
// throw error message
// return response
}
$groupMembers->users()->attach($unAssociatedUserIds);
建议先验证您的数据。
希望能帮助到你!