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】:

您可以使用sometimesconditionally 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 基于另一列值的唯一验证规则的主要内容,如果未能解决你的问题,请参考以下文章

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

多次扩展 Laravel 验证器

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

Laravel 唯一的验证规则,除了不工作

Laravel - 唯一规则验证 - getMessages 不存在

Laravel更新模型,具有属性的唯一验证规则