laravel的验证规则

问题描述 投票:1回答:2

我有一个表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
2个回答
1
投票

您可以使用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();

它将在记录中的个人ID等于您通过的个人ID的情况下,将gate_id设置为唯一。

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

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

0
投票

您需要指定何时应用唯一验证规则。使用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且对gate_id相同时,person_id将是唯一的>

© www.soinside.com 2019 - 2024. All rights reserved.