What is the difference between Model::lists() and Model::all()->lists() in Laravel?

Asked

Viewed 1,555 times

3

In the Laravel, we have a method that we can list fields from a table in the key value style.

I can do it two ways

Thus:

Usuario::lists('nome', 'id');

And So:

Usuario::all()->lists('nome', 'id');

The result of this would be:

 [1 => 'Wallace', 2 => 'Guilherme', 3 => 'Bigown', 4 => 'Miguel']

But, seeing that there are two ways to do this, what is the difference between the two?

1 answer

2


Well, the difference is this: When you invoke lists you cause only the specific fields to be specified in the Orm and bring them in array.

Example:

Usuario::lists('nome', 'id');

Is the same as :

SELECT nome, id FROM usuarios

The case of the method all followed by lists something else happens. When we call Usuario::all() we bring all the results in the table usuarios and with all fields selected.

SELECT * FROM usuários

The method all return an object called Illuminate\Database\Eloquent\Collection. This object, in turn, has the method all. But internally, it uses the so-called function array_pluck to capture only the two past items, such as key and value.

Performance

The difference in performance is remarkable between the two explanations. lists won both in the execution of the query and in the amount of data brought to PHP.

If you are just going to bring a list containing the key-value pair of the bank, you should use lists.

But there are cases where, in addition to bringing the user’s complete data, for reasons of need of a certain type, you would want to transform an object Eloquent\Collection in a array.

In this case, we are talking about a concept of object orientation called Reuse.

An example of this is to need to bring all user data to make a listing in a table, but at the same time need a listing of these users in a select (then it will be necessary to use lists in that collection, not to make another SELECT in the bank).

Let me give you an example:

 $usuario = Usuario::all();

 // Preciso da lista de nomes e ids para passar para um "select" no html

$usuarios_lista = $usuarios->lists('nome', 'id');

Browser other questions tagged

You are not signed in. Login or sign up in order to post.