首页 文章

Laravel条件唯一性验证器不起作用

提问于
浏览
0

我想验证数据库表 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

有解决方案的人吗?

2 回答

  • 1

    第二个参数是字段,您要寻找的是唯一的 . 更改ID,命名 . 第三个参数是id,查找必须跳过该id .

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

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

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

相关问题