15

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.

0

2 Answers 2

18

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.

Sign up to request clarification or add additional context in comments.

Comments

9

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]

1 Comment

Ah, this seems to work for 'Illuminate\Support\Collection' indeed. Since I was getting the collection from an Eloquent model ('Illuminate\Database\Eloquent\Collection') I was under the impression that the all I used SomeModel::all() was already the same. But now I see that I need to do another all-call on the result: SomeModel::all()->all().

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.