Arno van Oordt
Arno van Oordt

Reputation: 3520

Laravel: Convert Eloquent collection to Array without converting elements

Is there a (simple) way to convert an Eloquent Collection to an actual array without converting the elements themselves?

I get in trouble when I try to pass the collection into a php method like array_rand($collection). This gives me the error: array_rand() expects parameter 1 to be array, object given.

I worked around this by using $collection->shuffle()->first(); which works fine and of course I could loop over the collection and push all in an array, but just out of curiosity I wonder if I'm overlooking something.

Upvotes: 14

Views: 20752

Answers (2)

Remul
Remul

Reputation: 8252

You can use the all collection helper:

The all method returns the underlying array represented by the collection:

collect([1, 2, 3])->all();

// [1, 2, 3]

Upvotes: 8

Peter
Peter

Reputation: 1725

My first thought was $collection->toArray() but that also converts the Eloquent models to arrays. But the docs say that $collection->all() should avoid that.

toArray also converts all of the collection's nested objects to an array. If you want to get the raw underlying array, use the all method instead.

Upvotes: 17

Related Questions