php 如果用户已使用Laravel分配,如何限制同一用户分配到一个组中

66bbxpm5  于 2022-12-21  发布在  PHP
关注(0)|答案(1)|浏览(123)

这是我的身体要求:

{
    "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);
    }
wpx232ag

wpx232ag1#

一个简单的方法是使用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);

建议先验证数据。
希望能有所帮助!

相关问题