【问题标题】:Laravel conditional uniqueness validator doesn't workLaravel 条件唯一性验证器不起作用
【发布时间】:2016-01-19 00:36:45
【问题描述】:

我想验证数据库表pools 中的name 字段是唯一的。当我创建一个新条目时,这工作正常:

$rules = [
    'name' => 'required|unique:pools'
];

但是,当我想更新现有记录时,唯一性检查应该跳过正在更新的项目(显然,名称可能不会改变)。所以我挖了一下,发现了这个选项:

$rules = [
    'name' => 'required|unique:pools,id,1'
];

其中 1 是我正在更新的记录的 ID。这似乎解决了问题,但后来我使用不同的 ID 进行了测试(在这种情况下验证器应该返回错误),但它仍然允许添加具有相同 name 的新记录。

例如,如果我这样做

$rules = [
    'name' => 'required|unique:pools,id,4'
];

其中 4 是数据库中完全不同的条目的 ID(甚至是根本不存在的 ID),唯一性检查不起作用,并且允许我根据需要创建尽可能多的重复记录。似乎将任何 ID 添加到上述规则会使验证器忽略数据库中的所有匹配项,除了具有给定 ID 的匹配项。

基本上,我遇到了与此问题中概述的问题类似的问题,只是答案对我不起作用:

Laravel 4 Validation unique(database) ignore current

谁有解决办法?

【问题讨论】:

    标签: php validation laravel laravel-4


    【解决方案1】:

    你犯了一个愚蠢的错误,试试这个

    $rules = [
    'name' => 'required|unique:pools,name,4'
    ];
    

    【讨论】:

    • 哈哈,真快:)
    • 我明白了。确实很傻。我猜会接受 2 秒前的答案,因为它们都是一样的。
    • @jovan 请接受其中一个,这将有助于另一个面临这个问题的人
    【解决方案2】:

    第二个参数是字段,你要找的东西是独一无二的。将id更改为名称。第三个参数是 id,查找必须跳过。

    $rules = [
       'name' => 'required|unique:pools,mame,4'
    ];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 2018-01-20
      • 1970-01-01
      • 2014-07-29
      • 1970-01-01
      • 2018-07-30
      相关资源
      最近更新 更多