laravel 基于另一列值的唯一验证规则
Posted
技术标签:
【中文标题】laravel 基于另一列值的唯一验证规则【英文标题】:laravel unique validation rule based on another column value 【发布时间】:2015-07-09 16:16:27 【问题描述】:我需要根据另一个列值 temp_mode
对名为 temp_name
的元素进行唯一验证。也就是说,当temp_mode
的值为email
时,temp_name
必须是唯一的。我做了这样的规则
'temp_name' => 'unique:templates,temp_name,NULL,temp_id,temp_mode,email'
templates
是数据库名称。这没有用。对于temp_mode
的所有值,它始终显示This template name is already present
。我知道还有其他方法可以实现这一目标。谁能给我一个解决这个问题的想法。
编辑
从下面的答案我已经尝试过这段代码
$rules = array(
'temp_txt' => 'required',
);
$validator = Validator::make(Input::all(),$rules);
$validator->sometimes('temp_name', 'unique:templates', function($input)
return $input->temp_mode == 'email';
);
但这向我显示了错误
BadMethodCallException Method [sometimes] does not exist
我是否应该在我的项目中安装任何附加功能才能使用sometimes
??
【问题讨论】:
【参考方案1】:您可以使用sometimes
conditionally add validation rules:
$validator = Validator::make(...);
$validator->sometimes('temp_name', 'unique:templates', function($input)
return $input->temp_mode == 'email';
);
if($validator->passes())
// yay
【讨论】:
如果我在 function($input) 中给出这样的代码是否正确return $input->temp_mode = Input::get('temp_mode');
??
不,这没有意义吗?我的代码有什么问题?啊,你的意思是值应该是email
?
谢谢..还有一个疑问..我是否需要将任何其他库包含在我的项目中以供用户 sometimes
使用?因为当我在我的项目中运行此代码时,它会显示此错误Method [sometimes] does not exist.
绝对不是。请编辑您的问题并添加不起作用的代码
奇怪...请检查您是否在vendor/laravel/framework/src/Illuminate/Validation/Validator.php
中找到public function sometimes(..
以上是关于laravel 基于另一列值的唯一验证规则的主要内容,如果未能解决你的问题,请参考以下文章