web-dev-qa-db-fra.com

Différence entre Eloquent\Model :: get () et all ()

Quelle est la différence entre les utilisations User::all() et User::get() sur Eloquent?

Sur l’API Laravel, il ne décrit que all() on Eloquent\Model.
Peut-être que get() est décrit sur Eloquent\Builder.

30
David Rodrigues

User::all() et User::get() feront exactement la même chose.

all() est une méthode statique sur le Eloquent\Model. Tout ce qu’il fait est de créer un nouvel objet de requête et d’appeler get() dessus. Avec all(), vous ne pouvez pas du tout modifier la requête effectuée (sauf que vous pouvez choisir les colonnes à sélectionner en les passant en tant que paramètres).

get() est une méthode sur l'objet Eloquent\Builder. Si vous devez modifier la requête, par exemple en ajoutant une clause where, vous devez utiliser get(). Par exemple, User::where('name', 'David')->get();.

51
patricus

Pour clarifier davantage pourquoi cela fonctionne, c'est parce qu'il y a une méthode magique dans la classe Model qui prend tout appel statique non défini, crée une instance, puis appelle la méthode sur l'instance pour vous. 

Vous pouvez le voir dans le code source ici: https://github.com/laravel/framework/blob/5.6/src/Illuminate/Database/Eloquent/Model.php (ligne 1580)

Ceci est également expliqué dans cet épisode de Laracast: https://laracasts.com/series/advanced-eloquent/episodes/3 (abonnement requis)

Moi aussi, j'ai été mystifié quand je suis tombé sur cette image pour la première fois et je n’ai pas trouvé get() comme méthode statique. Mais ensuite je me suis rappelé l'épisode Laracast qui m'a aidé à relier les points.

1
Kenny