【问题标题】:How to validate pivot table in Laravel?如何在 Laravel 中验证数据透视表?
【发布时间】:2021-10-12 13:33:27
【问题描述】:

在管理面板中,我有一个名为 Group 的东西,管理员可以创建一组用户,所以我的方案是:

groups 表包含:

id name
1 group1

group_user 表包含:

id group_id user_id
1 1 2
2 1 3

我的逻辑是:如果user 属于group,那么user 不能再次添加到同一个group

在更新中,当我添加一个已经存在于group 中的user 时,它又添加了它:

public function update($id, Request $request)
{
    $request->validate([
        'name' => 'sometimes|nullable|string',
        'user_ids' => 'sometimes|array',
    ]);

    $group = Group::findOrFail($id);

    $group->update($request->only('name'));

    if ($ids = $request->user_ids) {
        $group->users()->attach($ids);
    }

    return $this->apiRespone(null, 'group updated successfully', null, 200);
}

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    在附加之前检查用户是否已经在组中:

    public function update($id, Request $request)
    {
        $request->validate([
            'name' => 'sometimes|nullable|string',
            'user_ids' => 'sometimes|array',
        ]);
    
        $group = Group::findOrFail($id);
    
        $group->update($request->only('name'));
    
        foreach($request->user_ids as $user_id) {
            if (!$group->users()->where('id', $user_id)->exists()) {
                $group->users()->attach($user_id);
            }
        }
    
        return $this->apiRespone(null, 'group updated successfully', null, 200);
    }
    

    更新:
    要获取现有成员的列表,请在循环逻辑中应用:

        $existingUsers = [];
        foreach($request->user_ids as $user_id) {
            if (!$group->users()->where('id', $user_id)->exists()) {
                $group->users()->attach($user_id);
            } else {
                $existingUsers[] = $user_id;
            }
        }
    
        // now you can use $existingUsers
    

    【讨论】:

    • 如果我需要向管理员发送该用户已存在的消息,例如“Moshen 已在此组中”,该怎么办?
    • @user16390519 然后你需要一个else 块到if 内部foreach,然后在内部你将已经存在的成员推送到array 并返回它。
    • @user16390519 查看答案,我已根据您的要求对其进行了更新。也投票给答案,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 2018-12-15
    • 2017-05-04
    • 2019-06-06
    • 1970-01-01
    • 2020-10-25
    相关资源
    最近更新 更多