首頁  >  文章  >  後端開發  >  如何在 Laravel 中跨多個列強制執行唯一驗證?

如何在 Laravel 中跨多個列強制執行唯一驗證?

DDD
DDD原創
2024-10-30 06:35:02253瀏覽

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