【问题标题】:How to restrict same user to assign in one group if the user is already assign using Laravel如果用户已经使用 Laravel 分配,如何限制同一用户分配在一个组中
【发布时间】:2019-11-17 17:56:00
【问题描述】:

这是我的身体要求:

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

【问题讨论】:

  • 没有if语句来检查组成员是否已经附加到用户
  • 你能告诉我使用 if 语句的代码吗
  • @syed1234 如果一些用户被添加了而一些没有呢?即96 已经分配到组197 没有。你想怎么处理这个案子?
  • 在这种情况下不应显示消息,不应添加 96 但应添加 97
  • 如果两者都已分配,那么应该有消息显示,你能帮我实现这个功能吗

标签: php laravel authentication eloquent relationship


【解决方案1】:

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

建议先验证您的数据。

希望对你有帮助!

【讨论】:

  • 你能检查一下$groupMembers->users()->('users.id', $request->get('group_members'))->pluck('users. ID'); // ('users.id')
  • @syed1234 我更新了答案。请试一试。
猜你喜欢
  • 2017-07-23
  • 1970-01-01
  • 1970-01-01
  • 2023-01-08
  • 2020-07-17
  • 1970-01-01
  • 2015-06-27
  • 2014-07-01
  • 2017-01-26
相关资源
最近更新 更多