Laravel:使用唯一的驗證規則更新模型
在Laravel 中,模型更新期間驗證欄位對於確保資料完整性至關重要。但是,當更新現有記錄時,唯一的驗證規則可能會導致問題。
請考慮 Repository 類別中的以下程式碼:
<code class="php">public function update($id, $data) { $user = $this->findById($id); $user->fill($data); $this->validate($user->toArray()); $user->save(); return $user; }</code>
此程式碼嘗試重新驗證模型的字段,包括諸如「使用者名稱」和「電子郵件」。但是,當嘗試使用現有唯一值更新記錄時,此方法可能會導致驗證錯誤。
要解決此問題,我們需要從驗證中排除當前記錄,以允許在不違反唯一約束的情況下進行更新。我們可以透過將正在更新的實例的 id 附加到驗證器來實現這一點。具體方法如下:
傳遞實例的id:
將正在更新的實例的id 傳遞給更新方法:
<code class="php">public function update($id, $data) { $user = $this->findById($id); $user->fill($data); $this->validate($user->toArray(), ['id' => $id]); $user->save(); }</code>
從驗證中排除目前記錄:
在驗證器中,我們使用id 參數來偵測是否正在更新或建立資源:
更新: 對於唯一驗證規則,將,{$id} 附加到規則以排除目前記錄。例如:
<code class="php">'email' => 'unique:users,email,{$id}',</code>
建立: 對於唯一驗證規則,請勿包含 id。例如:
<code class="php">'email' => 'unique:users,email',</code>
透過遵循這些步驟,我們可以優雅地更新 Laravel 模型,同時確保遵守唯一的驗證約束。
以上是如何使用唯一的驗證規則更新 Laravel 模型而不出現錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!