我有一个表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);
您能帮我为该验证器制定规则吗?
您可以使用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;
您需要指定何时应用唯一验证规则。使用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将是唯一的>