Eloquent ORM laravel 5 Obtener matriz de ids

3 minutos de lectura

avatar de usuario
paranoico

Estoy usando Eloquent ORM laravel 5.1, y quiero devolver una matriz de ID mayor que 0, mi modelo se llama test.

Yo he tratado :

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

Vuelve :

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

Pero quiero que el resultado esté en una matriz simple como esta:

Array ( 1,2 )

avatar de usuario
Zakaria Acharki

podrías usar lists() :

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

NOTA : Mejor si defines tus modelos en Studly Case formato, por ejemplo Test.


También podrías usar get() :

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

ACTUALIZAR: (Para versiones >= 5.2 use ‘pluck()’ en su lugar)

los lists() el método fue obsoleto en las nuevas versiones >= 5.2ahora podrías usar pluck() método en su lugar:

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

NOTA:
Si necesitas un cuerdapor ejemplo en un espadapuede usar la función sin el aArray() parte, como:

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

  • con pluck(‘id’) la matriz es matriz(‘0’=>12, ‘1’=>14) y etc., cuando se usa en WhereIn(‘id’, $array), no selecciona por id, sino por matriz clave, entonces por 0,1…

    – Gediminas

    16 de julio de 2018 a las 9:02

  • toArray() debería devolver una matriz como [12,14]

    – Zakaria Acharki

    16 de julio de 2018 a las 9:06

  • oh, sí, tiene razón, estaba depurando a través de Debugbar ant print_r, y ambos mostraron valores de matriz con claves, pero no hay claves. ¡Gracias!

    – Gediminas

    16 de julio de 2018 a las 11:19

  • Estamos atascados en 4.2 para un proyecto, así que agradezco mantener la referencia ->lists(‘id’). Aunque eso generó una matriz directamente, no fue necesario ->toArray it.

    –Dustin Graham

    30 de enero de 2020 a las 17:55

avatar de usuario
Jorge

A partir de una Collectionotra forma de hacerlo sería:

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

Esto devolverá una matriz indexada, perfectamente utilizable por laravel en un whereIn() consulta, por ejemplo.

  • También se utiliza para la lista desplegable.

    – Birá

    12 de febrero de 2019 a las 1:34

  • Para obtener la colección de la que extraer del modelo \YourModel::all(['id'])->pluck... (al especificar solo la columna ID, no carga todos los datos en el modelo)

    – jave.web

    21 de mayo de 2019 a las 10:58


La respuesta correcta es el método. listses muy simple así:

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

¡Saludos!

  • ¿Cómo obtendría la lista de ID relacionada en una matriz a través de una relación de muchos a muchos?

    – Patros

    30 de enero de 2018 a las 17:09

  • Tal vez pueda usar la clase DB, ejemplo: DB::table(‘name_of_table’)->where(‘condition’)->lists(‘id’);

    – Radamés E. Hernández

    6 de febrero de 2018 a las 15:20

avatar de usuario
Mehmet Buttün

Puedes usar all() método en lugar de toArray() método (ver más: documentación de laravel):

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

Si necesitas un stringpuede usar sin toArray() archivo adjunto:

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

Solo una información adicional, si está usando DB:

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

Y si usa el modelo Eloquent:

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

lea sobre el método de listas ()

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

Una forma sencilla de obtener una matriz con los ID de modelo de una colección:

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

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

  • En cuanto a Laravel 8: ... ->get()->modelKeys()

    – Patros

    5 de noviembre de 2021 a las 1:19

  • ->get(‘id’)->clavesmodelo(); – no es necesario, es suficiente ->->get()->model Keys();

    – Hereje Sic

    3 de diciembre de 2021 a las 7:47

¿Ha sido útil esta solución?