111

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 )
George
  • 6,886
  • 3
  • 44
  • 56
paranoid
  • 6,799
  • 19
  • 49
  • 86

9 Answers9

278
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');

UPDATE: For versions < 5.2

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');

Gediminas Šukys
  • 7,101
  • 7
  • 46
  • 59
Zakaria Acharki
  • 66,747
  • 15
  • 75
  • 101
34

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.

George
  • 6,886
  • 3
  • 44
  • 56
  • 2
    Used for Drop Down list as well. – Bira Feb 12 '19 at 01:34
  • 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) – jave.web May 21 '19 at 10:58
7

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!

Radames E. Hernandez
  • 4,235
  • 27
  • 37
6

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
Rabbid76
  • 202,892
  • 27
  • 131
  • 174
Mehmet Bütün
  • 749
  • 9
  • 19
6

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();
Mahmoud Abdelsattar
  • 1,299
  • 1
  • 15
  • 31
6

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

Orici
  • 411
  • 6
  • 12
5

read about the lists() method

$test=test::select('id')->where('id' ,'>' ,0)->lists('id')->toArray()
Amir Bar
  • 3,007
  • 2
  • 29
  • 47
2

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

App\User::pluck('id')->toArray()
aslamdoctor
  • 3,753
  • 11
  • 53
  • 95
1

In Laravel 8 this works for me

$arr = SomeModel::where("field", value)->get()->toArray();
EduAvila
  • 11
  • 1