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 验证:唯一,当名称相同,但其他字段不同时的主要内容,如果未能解决你的问题,请参考以下文章