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 )
paranoico
fuente

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');
Zakaria Acharki
fuente
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.

Jorge
fuente
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!

Radamés E. Hernández
fuente
¿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
Mehmet Bütün
fuente
4

leer sobre el método lists ()

$test=test::select('id')->where('id' ,'>' ,0)->lists('id')->toArray()
Amir Bar
fuente
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();
Mahmoud Mostafa
fuente
0

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

App\User::pluck('id')->toArray()
doctor aslam
fuente
-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

Narendra Ojha
fuente
1
No funciona. Dice Llamar al método indefinido Illuminate \ Database \ Query \ Builder :: all ()
Jaber Al Nahian