Eloquent ORM laravel 5 Get Array of ids
Solution 1
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 use 'pluck()' instead)
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
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
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 4
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
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!
Comments
-
paranoid over 2 years
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 )
-
paranoid over 8 yearswhen I use in_array_command in blade file show this error. >in_array() expects parameter 2 to be array, object given
-
Amir Bar over 8 yearsoh now I get you, you need to call toArray(), lists() return collection
-
Pathros over 6 yearsHow would you get the related id's list in array through a many to many relationship??
-
Radames E. Hernandez about 6 yearsMaybe you can use DB class, example: DB::table('name_of_table')->where('condition')->lists('id');
-
Gediminas almost 6 yearswith pluck('id') array is array('0'=>12, '1'=>14) and etc, when used in WhereIn('id', $array), it selects not by id, but by array key, so by 0,1...
-
Zakaria Acharki almost 6 years
toArray()
should return an array like[12,14]
-
Gediminas almost 6 yearsoh yes, you are right, I was debugging via Debugbar ant print_r, and both of them showed array values with keys, but there are no keys. Thank you!
-
Bira about 5 yearsUsed for Drop Down list as well.
-
jave.web almost 5 yearsTo get the collection to pluck from from model
\YourModel::all(['id'])
...->pluck...
(with specifying just the ID column you don't load all data to model) -
Dustin Graham over 4 yearsWe're stuck on 4.2 for one project, so I appreciate keeping the ->lists('id') reference. Although that generated an array directly, didn't need to ->toArray it.
-
Pathros over 2 yearsAs for Laravel 8:
... ->get()->modelKeys()
-
Heretic Sic over 2 years->get('id')->modelKeys(); - no need, it's enough ->->get()->model Keys();