Laravel 验证:唯一,当名称相同,但其他字段不同时

Posted

技术标签:

【中文标题】Laravel 验证:唯一,当名称相同,但其他字段不同时【英文标题】:Laravel validation: unique, when name is equal, but other field is different 【发布时间】:2016-03-11 07:30:36 【问题描述】:

标签可以具有相同的名称,当它们的值modul_id 不同时。 目前我使用这段代码:

$tag = Tag::firstOrNew([
    'name' => $request->get('name'),
    'modul_id' => Modul::where('short', $modul_short)->first()->id
]);

if(!$tag->id) 
  $tag->save(); //this is a new entry

 else 
  //record was allready there

是否可以为“您可以具有相同的名称,但您需要不同的 modul_id”制定验证规则?

【问题讨论】:

【参考方案1】:

你可以使用 Laravel Validator 和唯一的验证规则:

 $module_id = $request->get('module_id');
 $rules = [
     'name' => 'unique:tags,name,NULL,id,modul_id,'.$module_id
 ]

这假设 module_id 是随请求一起提供的(或者在验证之前以其他方式获取。

该示例意味着,对“name”列上的“tags”表执行唯一检查,但该检查仅在与给定 $module_id 匹配的行上运行。

有关更多信息,您可以查看Laravel Docs - Unique Validation rule

【讨论】:

工作了,但是有没有办法把它放到请求类中? 您的意思是在表单请求验证中? 是的,我更愿意将验证和控制器分开。 这也应该适用。你哪里有问题? 从url获取值$module_id

以上是关于Laravel 验证:唯一,当名称相同,但其他字段不同时的主要内容,如果未能解决你的问题,请参考以下文章

具有唯一字段的 Laravel 验证服务

Laravel 5.7 具有 JSON 字段类型的存在/唯一验证

基于数据透视表 laravel 的唯一名称规则验证

如何在laravel中进行多字段唯一验证?

如何对 laravel 表单请求提出条件

Laravel 验证唯一规则反射类异常