2017-10-25 4 views
3

Der Titel ist weitgehend selbsterklärend. Eloquent hat eine MethodeEloquent/Laravel: Wie bekomme ich zuletzt die ID/Instanz von updateOrCreate()?

updateOrCreate()

hier dokumentiert genannt: https://laravel.com/docs/5.5/eloquent#other-creation-methods

In einigen Fällen ist dies wirklich nützlich ist. Aber nachdem ich updateOrCreate() getan habe, brauche ich entweder das aktualisierte/erstellte Objekt oder seinen Primärschlüssel oder seine ID.

Natürlich könnte ich MyModel::where(...)->first() tun und geben Sie alle diese Daten wieder, aber das ist ungeschickt und kann einige teure Anfrage sein.

jedoch updateOrCreate() gibt nur wahr oder falsch.

Irgendwelche Ideen?

+1

Mögliches Duplikat von [ Laravel, erhalten letzte Einfüge-ID mit Eloquent] (https://stackoverflow.com/questions/21084833/laravel-get-last-inserts-id-using-eloquent) – chiliNUT

Antwort

5

Das Verfahren wird ID erstellt oder aktualisiert Objekt zurückgeben, so dass dies nur tun:

$object = Model::updateOrCreate(['name' => 'John'], ['age' => 25]); 

$id = $object->id; 
+2

Eigentlich hast du Recht, als hätte ich eine benutzerdefinierte Funktion, die mir nicht gedankt hat. – Blackbam

+0

Die Methode scheint immer die zurückzugeben Objekt? – Adam

-1

Abfrage für die letzten

$lastRecord = MyModel::last(); 

Oder

$lastRecord = MyModel::orderBy('id', 'DESC')->first(); 
+2

Dies würde Ihnen nicht immer die richtige Aufzeichnung bringen, sagen Sie, Sie hätten eine Tabelle mit 40 Zeilen, die updateOrCreate-Methode aktualisiert die ID 20, keine der oben genannten würde die aktualisierte Version zurückgeben. Das obige funktioniert nur, wenn es einen neuen Datensatz erstellt hat. – JLeggatt

+0

Ja, Sie haben Recht, Sie müssen 'updated_at' verwenden, wenn Sie Zeitstempel verwenden. Sonst gibt es keinen anderen Weg (außer du schreibst die ID, wie Alexey sagte. Ich dachte, die Frage betraf verschiedene Anfragen. – Lloople

Verwandte Themen