Was ist der Unterschied zwischen diesen Methoden:
find()
findOrFail()
first()
firstOrFail()
get()
list()
toArray()
Ich habe sie verwendet und jeder liefert ein anderes Ergebnis und manchmal muss ich toArray()
am Ende hinzufügen, get()
weil meine Funktion ein Array erwartet. Werden die anderen Methoden nicht auch Arrays erzeugen?
Antworten:
find($id)
Nimmt eine ID und gibt ein einzelnes Modell zurück. Wenn kein übereinstimmendes Modell vorhanden ist, wird es zurückgegebennull
.findOrFail($id)
Nimmt eine ID und gibt ein einzelnes Modell zurück. Wenn kein übereinstimmendes Modell vorhanden ist, wird der Fehler 1 ausgegeben .first()
Gibt den ersten in der Datenbank gefundenen Datensatz zurück. Wenn kein übereinstimmendes Modell vorhanden ist, wird es zurückgegebennull
.firstOrFail()
Gibt den ersten in der Datenbank gefundenen Datensatz zurück. Wenn kein übereinstimmendes Modell vorhanden ist, wird der Fehler 1 ausgegeben .get()
Gibt eine Sammlung von Modellen zurück, die der Abfrage entsprechen.pluck($column)
Gibt eine Sammlung nur der Werte in der angegebenen Spalte zurück. In früheren Versionen von Laravel wurde diese Methode aufgerufenlists
.toArray()
konvertiert das Modell / die Sammlung in ein einfaches PHP-Array.Hinweis: Eine Sammlung ist ein verbessertes Array. Es funktioniert ähnlich wie ein Array, verfügt jedoch über zahlreiche zusätzliche Funktionen, wie Sie in den Dokumenten sehen können .
Leider können Sie mit PHP nicht überall ein Sammlungsobjekt verwenden, wo Sie ein Array verwenden können. Die Verwendung einer Sammlung in einer
foreach
Schleife ist beispielsweise in Ordnung. Übergeben Sie sie anarray_map
nicht. Wenn Sie ein Argument alsarray
angeben, lässt PHP nicht zu, dass Sie ihm eine Sammlung übergeben. Ab PHP 7.1 gibt es deniterable
Typehint , mit dem sowohl Arrays als auch Sammlungen akzeptiert werden können.Wenn Sie jemals ein einfaches Array aus einer Sammlung abrufen möchten, rufen Sie dessen
all()
Methode auf.1 Der von den Methoden
findOrFail
und ausgelöste FehlerfirstOrFail
ist aModelNotFoundException
. Wenn Sie diese Ausnahme nicht selbst abfangen, antwortet Laravel mit einem 404 , was Sie die meiste Zeit wollen.quelle
$post = Post::with('user.votes')->with('subreddit.moderators')->findOrFail($post->id);
damit ich darauf zugreifen kann,$post->subreddit->moderators->user_id
aber das gibtUndefined property: Illuminate\Database\Eloquent\Collection::$user_id
- ich kann zugreifen,$post->subreddit->moderators
aber nicht, wenn ich hinzufügeuser_id
- warum ist das so?subreddit
ist ein einzelnes Modell mit einermoderators
Eigenschaft.moderators
ist eine Sammlung, kein einzelnes Modell. Sie können nicht direkt darauf zugreifen. Sie können den ersten überprüfen, wenn Sie möchten:$post->subreddit->moderators[0]->user_id