首页  >  文章  >  后端开发  >  如何在 Laravel 中跨多个列强制执行唯一验证?

如何在 Laravel 中跨多个列强制执行唯一验证?

DDD
DDD原创
2024-10-30 06:35:02252浏览

How to Enforce Unique Validation Across Multiple Columns in Laravel?

Laravel:实现跨多个表列的唯一验证

对于数据库中包含多个列的表的情况,这些列的组合必须保持唯一,有必要在 Laravel 应用程序中强制执行此唯一性约束。

一个这样的示例是包含“ip”和“主机名”列的“服务器”表。您希望确保特定“ip”和“主机名”的组合是唯一的,即使单个“ip”或“主机名”值可能出现多次。

使用规则的解决方案:: unique()

要实现此验证,请使用 Rule::unique 方法。此方法允许您在给定的一组列上指定自定义唯一规则。下面是一个示例:

<code class="php">$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>

解释

  • 'where()' 闭包允许您定义唯一性规则的附加约束。在这种情况下,它指定“ip”和“hostname”列必须匹配,验证才会失败。
  • “unique()”方法允许您指定应应用唯一规则的表。在本例中,它是“servers”表。
  • “required”规则确保用户提供“ip”值。
  • “messages”数组自定义显示的错误消息,如果验证失败。

通过实施此规则,您可以有效确保您的应用程序不允许“服务器”表中出现重复的“ip”和“主机名”组合。

以上是如何在 Laravel 中跨多个列强制执行唯一验证?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn