Reputation: 3520
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
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
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 theall
method instead.
Upvotes: 17