【问题标题】:Validation rule for laravellaravel 的验证规则
【发布时间】:2020-06-09 08:11:06
【问题描述】:

我有一个表 GateAccess:id、person_id、gate_id、time_id。 向此表添加新记录时,我想防止为一个 person_id 添加具有相同 gate_id 的多条记录。 Gate_id 对于特定的 person_id 必须是唯一的。

我想要这样的桌子:

id, person_id, gate_id, time_id
1, 2, 1, 1
2, 2, 2, 2

但不是那个:

id, person_id, gate_id, time_id
1, 2, 1, 1
2, 2, 1, 2

我有一个验证器:

 $validator = Validator::make($data, [
            'first_name' => 'required',
        ], $messages);

你能帮我为这个验证器制定规则吗?

【问题讨论】:

  • 除了验证之外,还要考虑数据库级别的唯一键。

标签: laravel validation rules


【解决方案1】:

您需要指定何时应用唯一验证规则。 像这样使用 laravel 验证器:

[
  'some_field'=>'unique:table,field,NULL,id,criteria,compare'
]

该规则说,当“标准”等于“比较”时,“some_field”将是唯一的

你的例子是这样的

$person_id = Request::get('person_id');
$gate_id = Request::get('gate_id');  

[
    'person_id' => 'unique:GateAccess,person_id,NULL,id,gate_id,' . $gate_id;
    'gate_id' => 'unique:GateAccess,gate_id,NULL,id,person_id,' . $person_id;
];

所以当 gate_id 等于 $gate_id 时 person_id 将是唯一的,而对于 gate_id 也是如此

【讨论】:

    【解决方案2】:

    您可以使用validator rule 来实现您想要的,因此在您的情况下,您的验证应该如下所示。

    Validator::make($data, [
          'gate_id' => [
              'required',
              Rule::unique('GateAccess')->where(function ($query) use($data){
                   $query->where('person_id', $data->person_id);
              })->ignore($request->id),
          ],
    ])->validate();
    

    它会将gate_id 设置为唯一的,其中您记录中的人员ID 等于您传递的人员ID。

    不要忘记在您的代码中添加以上内容

    use Illuminate\Validation\Rule;
    use Illuminate\Support\Facades\Validator;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-17
      • 2020-06-25
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      • 2018-04-23
      相关资源
      最近更新 更多