Laravel -Update -Modell mit eindeutiger Validierungsregel für Attribut

Laravel -Update -Modell mit eindeutiger Validierungsregel für Attribut

Problem

Ich habe ein Laravel -Benutzermodell, in dem ich eindeutige Validierungsregel zu Benutzernamen und E -Mail hinzugefügt habe. Wenn ich meinen Benutzer nun über mein Repo aktualisiere und mein Modell neu validieren möchte, bekomme ich einen Fehler. So sieht meine Update -Methode aus

öffentliche Funktion Update ($ id, $ data)
$ user = $ this-> findById ($ id);
$ user-> fill ($ data);
$ this-> validate ($ user-> toArray ());
$ user-> save ();
$ user zurückgeben;

Dies schlägt beim Testen mit dem Testen mit

ValidationException: "Benutzername": ["Der Benutzername wurde bereits genommen."]],
"E -Mail": ["Die E -Mail wurde bereits angenommen."]

Gibt es eine Möglichkeit, dies elegant zu beheben??

Lösung

Dies ist ein häufiger Fehler in Laravel, wenn Sie etwas aktualisieren. Standardmäßig erfordern es eine ID als Schlüssel, um dem vorhandenen Eintrag zu entsprechen. Sie müssen also die ID der derzeit aktualisierten Instanz an den Validator anhängen.

Geben Sie die ID Ihrer Instanz über, um den eindeutigen Validator zu ignorieren.
Verwenden Sie im Validator einen Parameter, um festzustellen, ob Sie die Ressource aktualisieren oder erstellen.
Wenn Sie aktualisieren, erzwingen Sie die eindeutige Regel, um eine bestimmte ID zu ignorieren:

// Validierungsregeln
'E -Mail' => 'Eindeutig: Benutzer, E -Mail_address,' . $ userId,
Wenn Sie erstellen, fahren Sie wie gewohnt fort:
// Validierungsregeln
'E -Mail' => 'Eindeutig: Benutzer, E -Mail_address',