manejo ejemplos arreglos arreglo array php laravel laravel-4 eloquent

php - ejemplos - Lista de columnas elocuentes por clave con matriz como valores?



arreglo de arreglos en php (3)

Entonces puedo hacer esto con Eloquent:

$roles = DB::table(''roles'')->lists(''title'', ''name'');

Pero, ¿hay alguna manera de hacer que Eloquent obtenga una matriz de valores para cada clave distinta en lugar de solo una columna?

Por ejemplo, algo como lo siguiente:

$roles = DB::table(''roles'')->lists([''*'', DB:raw(''COALESCE(value, default_value)'')], ''name'');


Puede intentar algo como esto:

$roles = array(); array_map(function($item) use (&$roles) { $roles[$item->id] = (Array)$item; // object to array }, DB::table(''roles'')->get());

Si desea obtener un Object lugar de una Array como valor, simplemente elimine (Array) .

Alternativa: utilizando el modelo Eloquent (en lugar de DB::table ):

$roles = array(); array_map(function($item) use (&$roles) { $roles[$item[''id'']] = $item; }, Role::all()->toArray());

Otra alternativa: usar el método Collection::map() :

$roles = array(); Role::all()->map(function($item) use(&$roles) { $roles[$item->id] = $item->toArray(); });


Puedes usar el método keyBy :

$roles = Role::all()->keyBy(''name'');

Si no está usando Eloquent, puede crear una colección por su cuenta:

$roles = collect(DB::table(''roles'')->get())->keyBy(''name'');

Si usa Laravel 5.3+, el generador de consultas ahora realmente devuelve una colección, por lo que no es necesario volver a envolverla manualmente en una colección:

$roles = DB::table(''roles'')->get()->keyBy(''name'');


Si necesita una matriz key/value , desde Laravel 5.1 puede usar pluck . De esta forma, puede indicar qué atributos desea usar como key y como value .

$plucked = MyModel::all()->pluck(''MyIDAttribute'', ''MyNameAttribute''); return $plucked->all();

Obtendrás una matriz de la siguiente manera:

array:3 [▼ 1 => "My MyNameAttribute value" 2 => "Lalalala" 3 => "Oh!" ]