在 Laravel 中验证多列的唯一性
Laravel 的验证系统提供了一种便捷的方法来确保提交到应用程序的数据满足特定标准。一项常见要求是确保特定列包含唯一值。这在处理存储用户帐户或产品列表等数据的表时特别有用。
在您的例子中,您有一个名为“服务器”的表,其中包含两列:ip 和主机名。您需要确保 ip 和主机名的组合是唯一的。为了实现这一点,你可以使用 Laravel 的 Rule::unique 规则。
以下示例演示了如何实现验证规则:
<code class="php">use Illuminate\Validation\Rule; $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);</code>
此验证规则将检查提供的 ip 和主机名已存在于服务器表中。如果是,验证将失败并生成错误消息。
通过自定义 where 闭包,您可以进一步细化唯一性检查。例如,您可以使用 $this->id 属性排除正在更新的当前记录:
<code class="php">Rule::unique('servers') ->where(function ($query) use ($ip, $hostname) { return $query->where('ip', $ip) ->where('hostname', $hostname) ->where('id', '!=', $this->id); }),</code>
此修改可确保验证仅考虑表中的其他记录,而不考虑当前记录.
以上是如何在 Laravel 中验证多列的唯一性?的详细内容。更多信息请关注PHP中文网其他相关文章!