Laravel:使用唯一的驗證規則更新模型
在Laravel 中,在模型更新期間驗證欄位對於確保資料完整性至關重要。但是,在更新現有記錄時,唯一的驗證規則可能會導致問題。
請考慮 Repository 類別中的下列程式碼:
public function update($id, $data) {
$user = $this->findById($id);
$user->fill($data);
$this->validate($user->toArray());
$user->save();
return $user;
}
此程式碼嘗試重新驗證模型的字段,包括「使用者名稱」和「電子郵件」等唯一欄位。但是,當嘗試使用現有唯一值更新記錄時,此方法可能會導致驗證錯誤。
要解決此問題,我們需要從驗證中排除當前記錄,以允許在不違反唯一約束的情況下進行更新。我們可以透過將正在更新的實例的 id 附加到驗證器來實現這一點。具體方法如下:
傳遞實例的id:
將正在更新的實例的id 傳遞給更新方法:
public function update($id, $data) {
$user = $this->findById($id);
$user->fill($data);
$this->validate($user->toArray(), ['id' => $id]);
$user->save();
}
從驗證中排除目前記錄:
在驗證器中,我們使用id 參數來偵測是否正在更新或建立資源:
更新: 對於唯一驗證規則,將,{$id} 附加到規則以排除目前記錄。例如:
'email' => 'unique:users,email,{$id}',
創建:對於唯一驗證規則,請勿包含id。例如:
'email' => 'unique:users,email',
按照以下步驟,我們可以優雅地更新Laravel 模型,同時確保遵守獨特的驗證限制。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3