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!"
]