Laravel 对多个色谱柱的独特验证

2022-08-30 09:04:26

我在表服务器中有2列。

我有列和.iphostname

我有验证:

'data.ip' => ['required', 'unique:servers,ip,'.$this->id]

这仅适用于列 。但是如何做到这一点,它将工作和列?iphostname

我想用列和.因为可以在列 ip 和主机名中重复,当用户写入 ip 时。iphostname


答案 1

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

编辑:修复了消息分配


答案 2

以下内容将适用于创建

'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”条件,但只能检查相等性。任何其他比较都需要一个闭包(如在接受的答案中)。


推荐