【问题标题】:Laravel validation - unique with nullable whereLaravel 验证 - 唯一的可空位置
【发布时间】:2017-12-16 15:21:31
【问题描述】:

我必须编写验证规则来验证addressrouting_id 具有给定值的行上是否唯一。这很简单。但在某些情况下,routing_id 字段可能是 NULL,然后我的验证请求规则不起作用。

这是我的规则:

$rules['address']   = 'required|ip|unique:vias,address'.\Route::current()->getParameter('via')->id.',id,routing_id,'.request()->input('routing_id'));

当我在POST 数组中将null 的行修补为routing_id 时,我希望我的address 在所有routing_id 字段为空的行中是唯一的。但它不起作用。

我的问题是:如何解决?

【问题讨论】:

  • 你为什么要连接这个:address'.\Route::current()->getParameter('via')->id.' 其次你在使用 L5.4 吗?
  • 唯一规则需要:表(vias)、列(address)、修补时忽略的id(\Route::current()->getParameter('via')->id)、id列的名称(id),然后附加条件:所以我有:routing_id 等于给定的routing_id 后值。 (项目已经使用L5.3构建,我还没有更新到5.4)
  • 记住:unique:table,column,except,idColumn 在这种情况下应该是这样的:$routing_id = \Route::current()->getParameter('via')->id; "required|ip|unique:vias,address,{$routing_id},routing_id"
  • 你不明白。 routing_id 不是我的 id 专栏。我需要有唯一的address 值,其中routing_id 为空或具有任何其他值。当routing_id 具有除 NULL 以外的任何值时,它可以正常工作。

标签: laravel laravel-5 eloquent laravel-validation laravel-request


【解决方案1】:

经过几个小时的研究,我终于找到了问题所在。

通过使用在 Laravel 中实现的Store Request Validation,我可以修改 POST 参数。在我上面发布的验证规则中,我有

request()->input('routing_id')

它正在检索请求参数的 FRESH 副本,而不是我修改的这些。这就是为什么没有使用我的NULL 值的原因——因为我有条件地将一些特殊值与NULL 值合并。

参数已正确更改,但仅在 StoreRequestValidation 类中。

【讨论】:

    【解决方案2】:

    你可以先检查 address!=null 然后 做验证 喜欢这些代码

    $this->validate($request,
                [
                    'name' => 'required|max:50',
                    'lastname' => 'required|max:50',
                    'city_id' => 'required',
                    'avatar' => 'mimes:jpeg,bmp,png,jpg'
                ]);
    
            if(isset($request->address))
            {
                $this->validate($request,
                    [
                        'address' => 'required|max:150|email|unique:users'
                    ]);
            }
    

    【讨论】:

    • 请不要只转储代码作为答案,包括解释如何以及为什么解决问题。
    猜你喜欢
    • 2018-07-29
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 2022-12-05
    • 2015-02-27
    • 2018-01-30
    • 2019-03-24
    • 1970-01-01
    相关资源
    最近更新 更多