在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中文網其他相關文章!