【问题标题】:how to make validation for two columns如何对两列进行验证
【发布时间】:2019-03-30 02:20:52
【问题描述】:

我需要一个干净的解决方案,这就是我发布此内容的原因。

所以我有一个表单请求验证,如下所示:

 public function rules()
    {
        return [
            'restaurant_id' => 'required',
            'rating' => 'required',
            'comment' => 'required',
            'visited_at' => 'required|date'
        ];
    }

在控制器中,我也有 user_id 但请求不包含它。现在,我想更改上述规则,以便 user_id 和 restaurant_id 一起只创建一次。所以例如。 User_id 1 和 restaurant_id 2 保存为一行。如果这两列的值相同,则应该抛出错误。

最好和干净的方法是什么?

【问题讨论】:

    标签: laravel


    【解决方案1】:

    您可以像这样扩展exists 规则:

    public function rules()
    {
        $user = $this->user();
    
        return [
            'restaurant_id' => [
                'required',
                 Rule::exists('YOUR_TABLE_NAME')->where(function ($query) use ($user) {                
                     $query->where('restaurant_id', request('restaurant_id'))
                           ->where('user_id', $user->id);
                 })
            ],
            'rating' => 'required',
            'comment' => 'required',
            'visited_at' => 'required|date'
        ];
    }
    

    【讨论】:

    • 谢谢。这太好了。我可能在 rules() 函数中没有 $this->user() 实例。可以从外面传过去吗?
    • $this->user() 来自请求,因此除非您没有任何人通过身份验证访问此路由,否则它将返回 null。但随后在闭包中进行空检查。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多