Laravel: Modelle mit eindeutigen Validierungsregeln aktualisieren
Beim Aktualisieren von Modellen in Laravel ist die Sicherstellung der Datenintegrität durch Validierung von entscheidender Bedeutung. Allerdings können eindeutige Validierungsregeln für Attribute wie Benutzername und E-Mail eine Herausforderung darstellen.
Problemstellung
In einem hypothetischen Benutzermodell, bei dem Benutzername und E-Mail eindeutige Validierungsregeln haben, Das Aktualisieren eines Datensatzes mithilfe eines Repositorys kann Validierungsfehler auslösen:
public function update($id, $data) { $user = $this->findById($id); $user->fill($data); $this->validate($user->toArray()); $user->save(); return $user; }
Dies schlägt beim Testen fehl und gibt Folgendes zurück:
ValidationException: {"username":["The username has already been taken."],"email":["The email has already been taken."]}
Lösung: Eindeutige Regeln für die aktuelle Instanz ignorieren
Um dieses Problem elegant zu lösen, kann die eindeutige Validierungsregel für die aktuelle Instanz, die aktualisiert wird, ignoriert werden.
Übergeben Sie die Instanz-ID an den Validator:
Übergeben Sie in der Repository-Methode die ID der Instanz, die aktualisiert wird, an die Validierungsmethode.
Verwenden Sie einen Parameter im Validator, um zwischen zu unterscheiden Erstellung und Aktualisierung:
Fügen Sie in den Validierungsregeln einen Parameter hinzu, der angibt, ob es sich bei dem Vorgang um eine Aktualisierung oder eine Erstellung handelt.
Regeln für die Aktualisierung :
Erzwingen Sie, dass die eindeutige Regel die aktuelle ID ignoriert:
'email' => 'unique:users,email_address,' . $userId,
Regeln zum Erstellen:
Fahren Sie wie gewohnt mit fort eindeutige Regel:
'email' => 'unique:users,email_address',
Durch die Einbindung dieser Änderungen können eindeutige Validierungsregeln erzwungen werden, ohne Aktualisierungen für vorhandene Datensätze zu behindern.
Das obige ist der detaillierte Inhalt von## Wie aktualisiere ich Modelle mit eindeutigen Validierungsregeln in Laravel ohne Fehler?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!