【问题标题】:laravel validation is not working properlylaravel 验证无法正常工作
【发布时间】:2020-12-22 20:33:55
【问题描述】:

我有一种情况,名称字段应该是唯一的,但该规则仅适用于组值与数据库中先前添加的组匹配时。 有一个 group 输入和 name 其他输入,可以由用户动态添加,但为简单起见,我在下面添加了 2 个带有 name[] 属性的输入。 如果将第一个名称输入(未使用第二个名称输入)发送到验证,则它可以工作,但是当两个输入值都发送时,验证不起作用。我该如何解决。提前致谢。

$request->validate([
    'group' => 'required',
    'name' => [
        'required', Rule::unique('group_tbl')->where(function ($query) use ($request){
            $query->where('group', $request->get('group')); 
        })
    ]
]);

表单输入:

<input name="group" placeholder="group here" required >
<input name="name[]" placeholder="name here" required >
<input name="name[]" placeholder="name here" >

例如,在 db 中添加了组“G”和名称“A”。现在如果提交组输入“G”和名称输入“A”,则会显示验证错误“名称已被占用”。但是如果组输入“G”,名称输入“A”和其他名称输入“B”提交,则没有错误。它不应该被保存,因为组“G”下的名称“A”已经存储在db中。

数据库:

id group name
1 G A

【问题讨论】:

  • returnmising 就像return $query-&gt;where('group', $request-&gt;get('group'));
  • 增加了回报,但没有运气。如果两个输入都填满,则成功。但是,如果最后一个输入为空,则验证有效。
  • name 是一个数组,所以这里真正应该唯一的是'name.*' =&gt; ...
  • 我已经尝试过了,但它给出了异常 - SQLSTATE[42S22]: Column not found: 1054 Unknown column 'name.0' in 'where clause' (SQL: select count(*) as聚合
  • 也使用Rule::unique('group_tbl', 'name') 指定列名

标签: laravel


【解决方案1】:

你可以使用:

$request->validate([
    'group' => 'required',
    'name.*' => [
        'required', Rule::unique('group_tbl', 'name')->where(function ($query) use ($request){
            $query->where('group', $request->get('group'));
        })
    ]
]);

【讨论】:

    猜你喜欢
    • 2020-07-17
    • 2016-11-09
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 2017-05-10
    • 1970-01-01
    相关资源
    最近更新 更多