Laravel firstOrNew wie überprüfe ich, ob es zuerst oder neu ist?

Lesezeit: 4 Minuten

Benutzer-Avatar
Sigmaxf

Ich verwende die Funktion von Laravel firstOrNew() um einen neuen Benutzer zu erstellen oder einen vorhandenen zu finden und zu aktualisieren.

Woher weiß ich, nachdem das Objekt erstellt wurde, ob es vorher existierte oder ob es sich um ein neues Objekt handelt?

Die Idee ist ungefähr so:

$user = \App\User::firstOrNew([
    'email' => $userData->getEmail(),
    'name' => $userData->getName(),
]);

if ($user->new) { // some way to check
    // user was created now
} else {
    //user already existed
}

  • Überprüfen Sie den erstellten Zeitstempel

    – Khan Shahrukh

    6. Juni 2015 um 19:46 Uhr

  • wird es immer noch leer sein, wenn ich firstorNew verwende? Es wird noch nicht in der Datenbank sein

    – sigmamaxf

    6. Juni 2015 um 19:47 Uhr

  • warum “es wird noch nicht in der Datenbank sein”?

    – Khan Shahrukh

    6. Juni 2015 um 19:48 Uhr

  • Wenn Sie firsOrNew verwenden, wird nur das Modell erstellt. Wenn Sie firstOrCreate ausführen, wird das Modell erstellt und gespeichert

    – sigmamaxf

    6. Juni 2015 um 20:23 Uhr

Benutzer-Avatar
Patrikus

firstOderNew()

Diese Funktion gibt entweder den ersten Datensatz aus der Datenbank zurück oder instanziiert eine neue Modellinstanz, die noch nicht in der Datenbank vorhanden ist. Wenn Sie also überprüfen möchten, ob die Instanz aus der Datenbank gezogen wurde oder ob es sich um eine neue Instanz handelt, können Sie dies überprüfen exists Eigentum (ohne Funktion) am Modell.

if ($user->exists) {
    // user already exists and was pulled from database.
} else {
    // user created from 'new'; does not exist in database.
}

Die ursprüngliche Frage war ca firstOrNew()aber viele Leute scheinen hierher zu kommen firstOrCreate()auch. firstOrCreate() ist anders und erfordert eine andere Prüfung.

firstOderCreate()

Diese Funktion gibt entweder den ersten Datensatz aus der Datenbank zurück oder erstellt einen neuen Datensatz in der Datenbank und gibt diesen zurück. Da ein neu erstellter Datensatz in der Datenbank vorhanden wäre, können Sie dies nicht überprüfen exists Eigentum, weil es in beiden Fällen wahr sein wird. Sie können dies jedoch überprüfen wasRecentlyCreated Eigentum. Diese Eigenschaft ist wahr, wenn die aktuelle Modellinstanz gerade in der Datenbank erstellt wurde, oder falsch, wenn sie bereits in der Datenbank vorhanden war.

if ($user->wasRecentlyCreated) {
    // user just created in the database; it didn't exist before.
} else {
    // user already existed and was pulled from database.
}

  • Unbedingt nicht verwenden $user->exists(). Ich habe gerade diesen Fehler gemacht.

    – JR Lawhorne

    21. August 2018 um 18:30 Uhr

  • Das funktioniert bei mir nicht, weil exists bedeutet im Wesentlichen, dass der Datensatz in der DB vorhanden ist. Was ich wirklich wissen möchte, ist, dass der Datensatz gerade eingefügt wurde oder vor der Operation existierte. Außerdem enthält das zurückgegebene neue Objekt nicht wirklich die Daten, die ich zum Erstellen des DB-Datensatzes verwenden möchte. Die Antwort von Pengxer/Thomas Kim ist wirklich das, wonach ich gesucht habe.

    – wortreich

    17. September 2018 um 15:45 Uhr

  • @verboze bei der Verwendung firstOrNew das Modell wird nicht in die Datenbank eingefügt. Wenn Sie das erste Modell in der Datenbank finden und eine neue Zeile einfügen möchten, falls keine vorhanden ist, sollten Sie verwenden firstOrCreate. Dann, wenn Sie verwenden firstOrCreate Du kannst anrufen wasRecentlyCreated und wenn das wahr ist, wurde das Modell gerade in der Datenbank erstellt, und wenn es falsch ist, existierte es schon einmal.

    – Nathan Heffley

    25. August 2019 um 0:10 Uhr

Sie können überprüfen, ob Ihr Benutzer kürzlich erstellt wurde.

if ($user->wasRecentlyCreated) {
    // new user
} else {
    // user already exists
}

(Quelle: Thomas Kim aus dieser Antwort)

  • wasRecentlyCreated ist nur im Kontext von firstOrCreate/updateOrCreate nützlich und gibt an, ob das Modell gerade in der Datenbank erstellt wurde. firstOrNew speichert selbst nichts in der Datenbank und setzt wasRecentlyCreated nicht.

    – Simon Grönewolt

    24. April 2018 um 7:53 Uhr


  • OP hat nach firstOrNew gefragt, nicht nach diesem

    – Rotimi

    12. Mai um 10:33 Uhr

Benutzer-Avatar
Diksha Chaudhary

Wenn Sie das Modell im aktuellen Lebenszyklus erstellt haben, wird das Attribut wasRecentlyCreated des Modells auf „true“ gesetzt. Andernfalls wird dieses Attribut auf „false“ gesetzt.

Mit anderen Worten, nehmen wir an, Sie haben einen Benutzer mit der E-Mail-Adresse [email protected]

$user = User::firstOrCreate(['email' => '[email protected]']);
var_dump($user->wasRecentlyCreated);

// Das obige gibt false aus, da dieser Eintrag bereits existierte, andernfalls true.

  • OP hat nach firstOrNew gefragt, nicht nach diesem

    – Rotimi

    12. Mai um 10:33 Uhr

Sie können im Modell jederzeit nach einer ID (oder einem anderen eindeutigen Primärschlüssel) suchen.

$user = \App\User::firstOrNew([
    'email' => $userData->getEmail(),
    'name' => $userData->getName(),
]);

if($user->id) {
    // The user exists and was retrieved from the database...
}

if (!$user->id) {
    // The user was not found in the database and a new User model was created...
}

Es ist wichtig, daran zu denken, dass das Modell nach der Verwendung bestehen bleibt $user->save()können Sie NICHT verwenden $user->id um zu überprüfen, ob es in der Datenbank gefunden wurde oder nicht. Dies liegt daran, dass Eloquent nach dem Speichern alle Attribute des neuen Modells ausfüllt.

1345380cookie-checkLaravel firstOrNew wie überprüfe ich, ob es zuerst oder neu ist?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy