Eloquent ORM laravel 5 Get Array of ids

PhpLaravelLaravel 5EloquentModel

Php Problem Overview


I'm using Eloquent ORM laravel 5.1, and I want to return an array of ids greater than 0, my model is called test.

I have tried :

$test=test::select('id')->where('id' ,'>' ,0)->get()->toarray();

It returns :

Array ( [0] => Array ( [id] => 1 ) [1] => Array ( [id] => 2 ) )

But I want the result to be in simple array like this:

Array ( 1,2 )

Php Solutions


Solution 1 - Php

You could use lists() :

test::where('id' ,'>' ,0)->lists('id')->toArray();

NOTE : Better if you define your models in Studly Case format, e.g Test.


You could also use get() :

test::where('id' ,'>' ,0)->get('id');

UPDATE: (For versions >= 5.2)

The lists() method was deprecated in the new versions >= 5.2, now you could use pluck() method instead :

test::where('id' ,'>' ,0)->pluck('id')->toArray();

NOTE: If you need a string, for example in a blade, you can use function without the toArray() part, like:

test::where('id' ,'>' ,0)->pluck('id');

Solution 2 - Php

From a Collection, another way you could do it would be:

$collection->pluck('id')->toArray()

This will return an indexed array, perfectly usable by laravel in a whereIn() query, for instance.

Solution 3 - Php

The correct answer to that is the method lists, it's very simple like this:

$test=test::select('id')->where('id' ,'>' ,0)->lists('id');

Regards!

Solution 4 - Php

You can use all() method instead of toArray() method (see more: laravel documentation):

test::where('id' ,'>' ,0)->pluck('id')->all(); //returns array

If you need a string, you can use without toArray() attachment:

test::where('id' ,'>' ,0)->pluck('id'); //returns string

Solution 5 - Php

read about the lists() method

$test=test::select('id')->where('id' ,'>' ,0)->lists('id')->toArray()

Solution 6 - Php

Just an extra info, if you are using DB:

DB::table('test')->where('id', '>', 0)->pluck('id')->toArray();

And if using Eloquent model:

test::where('id', '>', 0)->lists('id')->toArray();

Solution 7 - Php

A simple way to get an array with the model IDs from a collection:

$test = test::select('id')->where('id' ,'>' ,0)->get('id')->modelKeys();

Available since Laravel 5.5: https://laravel.com/api/5.5/Illuminate/Database/Eloquent/Collection.html#method_modelKeys

Solution 8 - Php

Although you have marked the Answer, This is a much simpler approach

App\User::pluck('id')->toArray()

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionparanoidView Question on Stackoverflow
Solution 1 - PhpZakaria AcharkiView Answer on Stackoverflow
Solution 2 - PhpGeorgeView Answer on Stackoverflow
Solution 3 - PhpRadames E. HernandezView Answer on Stackoverflow
Solution 4 - PhpMehmet BütünView Answer on Stackoverflow
Solution 5 - PhpAmir BarView Answer on Stackoverflow
Solution 6 - PhpMahmoud AbdelsattarView Answer on Stackoverflow
Solution 7 - PhpOriciView Answer on Stackoverflow
Solution 8 - PhpaslamdoctorView Answer on Stackoverflow