Das zu validierende Feld darf in der angegebenen Datenbanktabelle nicht vorhanden sein.
Specifying A Custom Column Name:
Die column-Option kann verwendet werden, um die entsprechende Datenbankspalte des Feldes anzugeben. Wenn die column-Option nicht angegeben ist, wird der Feldname verwendet.
'email' => 'unique:users,email_address'
Forcing A Unique Rule To Ignore A Given ID:
Manchmal möchten Sie eine bestimmte ID während der eindeutigen Prüfung ignorieren. Betrachten Sie beispielsweise einen Bildschirm "Aktualisierungsprofil", der den Namen, die E-Mail-Adresse und den Standort des Benutzers enthält. Sie werden wahrscheinlich überprüfen wollen, ob die E-Mail-Adresse eindeutig ist. Wenn der Benutzer jedoch nur das Namensfeld und nicht das E-Mail-Feld ändert, soll kein Validierungsfehler ausgegeben werden, da der Benutzer bereits Eigentümer der E-Mail-Adresse ist.
Um den Prüfer anzuweisen, die ID des Benutzers zu ignorieren, verwenden wir die Klasse Rule, um die Regel fließend zu definieren. In diesem Beispiel werden wir auch die Validierungsregeln als Array angeben, anstatt das Zeichen | zum Begrenzen der Regeln zu verwenden:
use Illuminate\Validation\Rule;
Validator::make($data, [
'email' => [
'required',
Rule::unique('users')->ignore($user->id),
],
]);
Sie sollten niemals eine benutzergesteuerte Anfrageeingabe an die ignore-Methode übergeben. Stattdessen sollten Sie nur eine vom System generierte eindeutige ID übergeben, wie z.B. eine automatisch inkrementierende ID oder UUID aus einer eloquenten Modellinstanz. Andernfalls ist Ihre Anwendung anfällig für einen SQL-Injektionsangriff.
Anstatt den Wert des Modellschlüssels an die ignore-Methode zu übergeben, können Sie die gesamte Modellinstanz übergeben. Laravel extrahiert automatisch den Schlüssel aus dem Modell:
Rule::unique('users')->ignore($user)
Wenn Ihre Tabelle einen anderen Spaltennamen für den Primärschlüssel als id verwendet, können Sie den Namen der Spalte beim Aufruf der ignore-Methode angeben:
Rule::unique('users')->ignore($user->id, 'user_id')
Standardmäßig überprüft die unique-Rule die Eindeutigkeit der Spalte, die dem Namen des zu validierenden Attributs entspricht. Sie können jedoch einen anderen Spaltennamen als zweites Argument an die unique-Methode übergeben:
Rule::unique('users', 'email_address')->ignore($user->id)
Adding Additional Where Clauses:
Sie können auch zusätzliche Abfrageeinschränkungen angeben, indem Sie die Abfrage mit der where-Methode anpassen. Fügen wir zum Beispiel eine Einschränkung hinzu, die bestätigt, dass die account_id 1 ist:
'email' => Rule::unique('users')->where(function ($query) {
return $query->where('account_id', 1);
})