Как ограничить назначение одного и того же пользователя в одну группу, если пользователь уже назначен с помощью Laravel - PullRequest
1 голос
/ 08 июля 2019

Это запрос моего тела:

          {
"id": "1",
"group_members": [96,97]

}

Здесь id 1 - это идентификатор группы, а group_members 96 и 97 - это идентификатор пользователя, и я назначил пользователей 96 и 97 с идентификатором группы 1и когда я пытаюсь снова назначить пользователей с одинаковым идентификатором 96 и 97, он не должен назначаться, он должен показать сообщение, что пользователи уже назначены с этим идентификатором группы

Как я могу добиться этого: у меня также естьподелитесь кодом с вами, ребята:

Ваша помощь будет высоко оценена!

                    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);
    }

1 Ответ

1 голос
/ 08 июля 2019

Самый простой способ - использовать метод 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);

Рекомендуется сначала проверить ваши данные.

Надеюсь, это поможет!

...