Laravel 对多个色谱柱的独特验证
2022-08-30 09:04:26
我在表服务器中有2列。
我有列和.ip
hostname
我有验证:
'data.ip' => ['required', 'unique:servers,ip,'.$this->id]
这仅适用于列 。但是如何做到这一点,它将工作和列?ip
hostname
我想用列和.因为可以在列 ip 和主机名中重复,当用户写入 ip 时。ip
hostname
我在表服务器中有2列。
我有列和.ip
hostname
我有验证:
'data.ip' => ['required', 'unique:servers,ip,'.$this->id]
这仅适用于列 。但是如何做到这一点,它将工作和列?ip
hostname
我想用列和.因为可以在列 ip 和主机名中重复,当用户写入 ip 时。ip
hostname
您可以使用 Rule::unique
来实现您的验证规则
$messages = [
'data.ip.unique' => 'Given ip and hostname are not unique',
];
Validator::make($data, [
'data.ip' => [
'required',
Rule::unique('servers')->where(function ($query) use($ip,$hostname) {
return $query->where('ip', $ip)
->where('hostname', $hostname);
}),
],
],
$messages
);
编辑:修复了消息分配
以下内容将适用于创建
'data.ip' => ['required', 'unique:servers,ip,'.$this->id.',NULL,id,hostname,'.$request->input('hostname')]
和以下更新
'data.ip' => ['required', 'unique:servers,ip,'.$this->id.','.$request->input('id').',id,hostname,'.$request->input('hostname')]
我假设这是你在表中的主键。将其替换为您的环境。id
唯一规则的(未记录的)格式为:
表[,列[,忽略值[,忽略列[,其中列,其中值]...]]]
可以指定多个“where”条件,但只能检查相等性。任何其他比较都需要一个闭包(如在接受的答案中)。