Eloquent ORM laravel 5 Obtener matriz de identificadores


84

Estoy usando Eloquent ORM laravel 5.1, quiero devolver una matriz de identificadores mayores que 0, Mi modelo llamado 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:

Array ( 1,2 )

Respuestas:


208

Podrías usar lists():

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

NOTA: Mejor si define sus modelos en Studly Caseformato, por ejemplo Test.


También puede utilizar get():

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

ACTUALIZAR: (Para versiones> = 5.2)

El lists()método quedó obsoleto en las nuevas versiones >= 5.2, ahora puede usar el pluck()método en su lugar:

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

NOTA: Si necesita una cadena , por ejemplo en una hoja , puede usar la función sin la parte toArray () , como:

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

3
con pluck ('id') array es array ('0' => 12, '1' => 14) y etc., cuando se usa en WhereIn ('id', $ array), selecciona no por id, sino por matriz clave, entonces por 0,1 ...
Gediminas

2
toArray()debería devolver una matriz como[12,14]
Zakaria Acharki

1
oh sí, tienes 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

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

18

De una Collection, otra forma en la que podrías hacerlo sería:

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

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


2
También se utiliza para la lista desplegable.
Bira

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

5

La respuesta correcta es el método lists, es muy simple así:

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

¡Saludos!


¿Cómo obtendría la lista de identificaciones relacionadas en una matriz a través de una relación de muchos a muchos?
Pathros

Tal vez pueda usar la clase DB, ejemplo: DB :: table ('nombre_de_tabla') -> donde ('condición') -> listas ('id');
Radames E. Hernandez

5

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

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

Si necesita un string, puede usar sin toArray()adjunto:

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

4

leer sobre el método lists ()

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

cuando uso in_array_command en el archivo blade, muestra este error. > in_array () espera que el parámetro 2 sea una matriz, objeto dado
paranoico

Oh ahora que se obtiene, es necesario llamar a toArray (), listas () de recogida de retorno
Amir Bar

0

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

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

Y si usa el modelo Eloquent:

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

0

Aunque ha marcado la Respuesta, este es un enfoque mucho más simple

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

-2

También puede usar el método all () para obtener una matriz de atributos seleccionados.

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

Saludos


1
No funciona. Dice Llamar al método indefinido Illuminate \ Database \ Query \ Builder :: all ()
Jaber Al Nahian
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.