Laravel:使用獨特的驗證規則更新模型
在 Laravel 中更新模型時,透過驗證確保資料完整性至關重要。然而,使用者名稱和電子郵件等屬性的獨特驗證規則可能會帶來挑戰。
問題陳述
在假設的使用者模型中,使用者名稱和電子郵件具有唯一的驗證規則,使用儲存庫更新記錄可能會觸發驗證錯誤:
public function update($id, $data) { $user = $this->findById($id); $user->fill($data); $this->validate($user->toArray()); $user->save(); return $user; }
測試失敗,回傳:
ValidationException: {"username":["The username has already been taken."],"email":["The email has already been taken."]}
解決方案:忽略目前實例的唯一規則
為了優雅地解決此問題,可以忽略目前正在更新的實例的唯一驗證規則。
將實例 ID 傳遞給驗證器:
在儲存庫方法中,將正在更新的實例的 ID 傳遞給 validate 方法。
在驗證器中使用參數來區分建立和更新:
在驗證規則中新增參數,指示該操作是更新還是創建。
更新規則:
強制唯一規則忽略目前ID:
'email' => 'unique:users,email_address,' . $userId,
建立規則:
照常進行唯一規則:
'email' => 'unique:users,email_address',
透過合併這些更改,可以在不妨礙現有記錄更新的情況下強制執行唯一驗證規則。
以上是## 如何在 Laravel 中使用獨特的驗證規則更新模型而不出現錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!