首页 > 解决方案 > 如果用户已经使用 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);
    }

标签: phplaravelauthenticationeloquentrelationship

解决方案


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

建议先验证您的数据。

希望能帮助到你!


推荐阅读