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