【问题标题】:Laravel Validator unique with conditionLaravel Validator 唯一的条件
【发布时间】:2018-02-12 09:14:03
【问题描述】:

我无法让验证器使用我想要设置的规则。我本可以制作多个表格,但要撤消所有内容需要做很多工作,所以如果可能的话,我更愿意让它工作。

$validator = Validator::make($input, [
        'segment_name' => [
          'required',
        Rule::unique('groups')->where(function ($query) {
        $query->where('lang', $list_name)->where('group_type', 'auto_segment');
      }),
    ],
  ]);

我认为查询是这样做的方法,但我现在意识到这会增加另一个约束。我想要的是在满足 2 个查询条件时验证失败,否则它应该通过。有什么简单的方法吗?


在花了更多时间在这方面,我做了更多尝试,但还没有奏效。使用 2 条规则,验证器在我希望它通过时失败,类似于使用 ||在 if 语句而不是 && 中。在两个规则之间使用管道失败并产生偏移错误,但这可能不正确。

'segment_name' => 'unique:groups,segment_name,NULL,id,lang,' . $list_name,
'segment_name' => 'unique:groups,segment_name,NULL,id,group_type,auto_segment'

'segment_name' => 'unique:groups,segment_name,NULL,id,lang,' . $list_name . '|unique:groups,segment_name,NULL,id,group_type,auto_segment'

在最终让原始查询在没有变量的情况下工作后,最终使用全局变量传递给查询,因为局部变量不起作用。

【问题讨论】:

  • 创建一个自定义验证,并通过验证(如管道分隔的要求)传递它。您将获得段的值,并且可以根据您的喜好进行操作以给出真假。
  • 我正在查看自定义验证和复杂条件验证laravel.com/docs/5.4/validation#rule-unique,我觉得我几乎已经掌握了,但还没有完全掌握。谢谢,我再试试看。
  • 原来是原始代码,按照我的意愿去做,但输入有问题。感谢 cmets 和答案。

标签: php laravel validation laravel-5


【解决方案1】:

对于独特的你可以这样做 -

$rules = [
    'segment_name' => 'required|unique', // you can unique validate like this also 'unique:tablename', for specific table 
];

//Validate inputs
$input = Input::only('segment_name');

$validator = Validator::make($input, $rules);

希望这对你有帮助。

【讨论】:

  • 感谢您的回复。使用类似于此方法,我能够将输入设为唯一,但我只希望在满足这些条件时它是唯一的 ->where('lang', $list_name)->where('group_type', 'auto_segment ')
  • 好的,但我想通过验证器这是不可能的。可以通过查询查看。
  • 谢谢,有道理。我之前用 Validator 设置了它,但后来更改了表,但如果不需要它就不想更改它。
猜你喜欢
  • 2018-01-30
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
  • 2016-01-19
  • 1970-01-01
  • 2012-01-04
  • 2010-10-26
相关资源
最近更新 更多