wake-up-neo.net

Unterschied zwischen Eloquent\Model :: get () und all ()

Was ist der Unterschied zwischen den Funktionen User::all() und User::get() bei Eloquent?

In der Laravel-API werden nur all() in Eloquent\Model beschrieben.
Möglicherweise ist get() auf Eloquent\Builder beschrieben.

30
David Rodrigues

User::all() und User::get() machen genau dasselbe.

all() ist eine statische Methode für Eloquent\Model. Sie müssen lediglich ein neues Abfrageobjekt erstellen und dort get() aufrufen. Mit all() können Sie die durchgeführte Abfrage überhaupt nicht ändern (außer Sie können die auszuwählenden Spalten auswählen, indem Sie sie als Parameter übergeben).

get() ist eine Methode für das Eloquent\Builder-Objekt. Wenn Sie die Abfrage ändern möchten, z. B. eine where-Klausel hinzufügen, müssen Sie get() verwenden. Zum Beispiel User::where('name', 'David')->get();.

51
patricus

Um zu klären, warum dies funktioniert, liegt dies daran, dass es in der Klasse Model eine magische Methode gibt, die jeden statischen Aufruf übernimmt, der nicht definiert ist, eine Instanz erstellen und dann die Methode in der Instanz für Sie aufrufen. 

Sie können es im Quellcode hier sehen: https://github.com/laravel/framework/blob/5.6/src/Illuminate/Database/Eloquent/Model.php (Zeile 1580)

Dies wird auch in dieser Laracast-Folge erläutert: https://laracasts.com/series/advanced-eloquent/episodes/3 (Abonnement erforderlich)

Als ich das zum ersten Mal sah, war ich auch verwirrt und konnte get() nicht als statische Methode finden. Dann erinnerte ich mich an die Laracast-Episode, die mir half, die Punkte miteinander zu verbinden.

1
Kenny