【问题标题】:issue with validation two columns at once一次验证两列的问题
【发布时间】:2019-08-19 00:01:35
【问题描述】:

我在 laravel 中通过两列进行验证时遇到问题

我的表 work_hours 包含 user_id 以及日期和时间,并且我有多个用户,因此我需要给用户机会添加他的时间,但对于特定日期只有一次

在 2018 年 3 月 28 日为 user_id = 9 添加 8 小时,但只添加一次 如果用户再次尝试添加 2018 年 3 月 28 日为 user_id = 9 添加 8 小时 他拥有该日期已获取的信息。

我写了验证:

$validator = Validator::make($request->all(), [
            'date' => 'unique:work_hours',
            'name_of_hours' => 'required',
        ]);

但如果有人在 2018 年 3 月 28 日为 user_id = 9user_id=10 或其他用户添加 8 小时,则无法在同一日期添加小时。

所以,我需要同时验证两列,user_id 和日期,但我不知道该怎么做。

【问题讨论】:

    标签: laravel validation eloquent


    【解决方案1】:

    这听起来像是一个很好的闭包案例。

    $validator = Validator::make($request->all(), [
            'date' => function ($attribute, $value, $fail) {
                // check the table for the date and current user
                $date = DB::table('work_hours')->where([
                    ['date', $value],
                    ['user_id', Auth::user()->id]
                ])->first();
                // if it exists then you fail
                if ($date) $fail($attribute.' is invalid.');
            },
            'name_of_hours' => 'required',
        ]);
    

    您可以在此处查看文档:https://laravel.com/docs/5.8/validation#using-closures

    【讨论】:

    • 谢谢,查询看起来非常好,因为我有 select * from work_hours where ( date = "2019-03-05" and user_id = 9 ) limit 1,但在 2018 年 5 月 3 日我没有这个 user_id 的小时数,但我有 {"errors":["date is invalid."]}
    • 我用的是爆炸,但编辑了我的答案。对于那个很抱歉!而不是 if ( ! $date ) 它应该是 if ( $date ) -- 只有当它是 true 时你才会失败,否则它是 false 并且找不到条目
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 2014-09-26
    • 1970-01-01
    • 2012-10-10
    • 2020-04-30
    • 2011-06-14
    • 2019-09-10
    相关资源
    最近更新 更多