Laravel: Mengemas kini Model dengan Peraturan Pengesahan Unik
Apabila mengemas kini model dalam Laravel, memastikan integriti data melalui pengesahan adalah penting. Walau bagaimanapun, peraturan pengesahan unik pada atribut seperti nama pengguna dan e-mel boleh menimbulkan cabaran.
Pernyataan Masalah
Dalam model Pengguna hipotesis yang nama pengguna dan e-mel mempunyai peraturan pengesahan unik, mengemas kini rekod menggunakan repositori boleh mencetuskan ralat pengesahan:
public function update($id, $data) { $user = $this->findById($id); $user->fill($data); $this->validate($user->toArray()); $user->save(); return $user; }
Ini gagal dalam ujian, mengembalikan:
ValidationException: {"username":["The username has already been taken."],"email":["The email has already been taken."]}
Penyelesaian: Mengabaikan Peraturan Unik untuk Contoh Semasa
Untuk menangani isu ini dengan elegan, peraturan pengesahan unik boleh diabaikan untuk tika semasa yang sedang dikemas kini.
Lepaskan ID tika kepada pengesah:
Dalam kaedah repositori, hantar ID kejadian yang sedang dikemas kini kepada kaedah pengesahan.
Gunakan parameter dalam pengesah untuk membezakan antara penciptaan dan kemas kini:
Dalam peraturan pengesahan, tambahkan parameter yang menunjukkan sama ada operasi itu adalah kemas kini atau ciptaan.
Peraturan untuk Kemas Kini :
Paksa peraturan unik untuk mengabaikan ID semasa:
'email' => 'unique:users,email_address,' . $userId,
Peraturan untuk Mencipta:
Teruskan seperti biasa dengan peraturan unik:
'email' => 'unique:users,email_address',
Dengan memasukkan perubahan ini, peraturan pengesahan unik boleh dikuatkuasakan tanpa menghalang kemas kini untuk rekod sedia ada.
Atas ialah kandungan terperinci ## Bagaimana untuk Mengemas kini Model dengan Peraturan Pengesahan Unik dalam Laravel Tanpa Ralat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!