Eloquent ORM laravel 5 Get Array of ids

190,914

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!

Share:
190,914
paranoid
Author by

paranoid

I am beginner in laravel .

Updated on December 07, 2021

Comments

  • paranoid
    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
    paranoid over 8 years
    when I use in_array_command in blade file show this error. >in_array() expects parameter 2 to be array, object given
  • Amir Bar
    Amir Bar over 8 years
    oh now I get you, you need to call toArray(), lists() return collection
  • Pathros
    Pathros over 6 years
    How would you get the related id's list in array through a many to many relationship??
  • Radames E. Hernandez
    Radames E. Hernandez about 6 years
    Maybe you can use DB class, example: DB::table('name_of_table')->where('condition')->lists('id');
  • Gediminas
    Gediminas almost 6 years
    with 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
    Zakaria Acharki almost 6 years
    toArray() should return an array like [12,14]
  • Gediminas
    Gediminas almost 6 years
    oh 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
    Bira about 5 years
    Used for Drop Down list as well.
  • jave.web
    jave.web almost 5 years
    To 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
    Dustin Graham over 4 years
    We'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
    Pathros over 2 years
    As for Laravel 8: ... ->get()->modelKeys()
  • Heretic Sic
    Heretic Sic over 2 years
    ->get('id')->modelKeys(); - no need, it's enough ->->get()->model Keys();