【问题标题】:Laravel Unique validation on Composite key upon Update更新时对复合键的 Laravel 唯一验证
【发布时间】:2021-09-16 02:11:59
【问题描述】:

我想在 Laravel 中为复合键添加一个验证规则。验证规则在添加新记录时工作正常,但在更新同一记录时会出现错误,因为名称已被占用。

      $validator = Validator::make($request->all(), [ 
        'name' => 'required|unique:labs,name,NULL,id,service_id,'.$request>input('service_id'),
    ]);

在此先感谢。任何帮助将不胜感激。

【问题讨论】:

  • 我也发现了有关独特痛苦的最新消息。你的模型有软删除吗?
  • 我不同意 - 如果您只允许完全更新,那完全有道理。
  • OP 的意思是,当他进行唯一验证时,在更新并点击提交而不进行任何更改时,它会显示验证错误。在这种情况下,它需要忽略唯一字段
  • @workservice 是的,我正在使用软删除。
  • 它给出与名称已存在相同的错误。

标签: php laravel


【解决方案1】:

你需要它来忽略当前的 ID。这可以在此处记录的唯一规则内完成:https://laravel.com/docs/8.x/validation#rule-unique

use Illuminate\Validation\Rule;

$service_id = // query here for the CURRENT service_id (not the one in the request), as you want to ignore the current one

Validator::make($data, [
    'name' => [
        'required',
        Rule::unique('service_id')->ignore($service_id),
    ]
]);

确保忽略唯一的当前 service_id,而不是请求中的。

【讨论】:

  • 或者你可以创建 Request 类并传递一个$id = null。如果您尝试更新没有更改的记录,它应该忽略 id 并且不返回验证错误
  • 这取决于你想要什么。如果您只允许完全更新(通常通过 put),您可以这样做。基于我现在假设的问题
  • 传入 $data 什么? $请求? $request->all() ?
猜你喜欢
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
  • 2014-08-20
  • 2015-05-19
  • 2018-07-17
  • 2018-08-09
  • 2019-02-26
  • 1970-01-01
相关资源
最近更新 更多