php - tablas - Laravel 5.2-Cambiar formato de datos obtener de Eloquent
manual de eloquent (5)
Tengo un modelo como este-
$feature_project = FeatureProject::select(''feature_id'')
->where(''project_id'', $project->id)
->get();
Y si lo devuelvo, obtengo un resultado como este-
[
{
"feature_id": 2
},
{
"feature_id": 4
},
{
"feature_id": 9
}
]
Pero quiero una salida como esta-
[2,4,9]
Entonces necesito convertir la salida.
Pero no encuentro un camino sin usar for-each loop (hacer una matriz temporal, insertar todos los elementos en esa matriz desde la matriz actual con un ciclo for-each).
Pero creo que hay una manera más inteligente que en Laravel para hacer eso.
Creo que Laravel Collection se usa para este propósito.
En las colecciones de Laravel, puede llamar a un método llamado Flatten, que aplana una colección multidimensional en una sola dimensión.
https://laravel.com/docs/5.2/collections#method-flatten
$collection = collect([''name'' => ''taylor'', ''languages'' => [''php'', ''javascript'']]);
$flattened = $collection->flatten();
$flattened->all();
// [''taylor'', ''php'', ''javascript''];
Con un objeto bastante plano, debería devolver solo los valores.
Puede usar lists()
y toArray()
:
$feature_project=FeatureProject::where(''project_id'', $project->id)->lists(''id'')->toArray();
Espero que esto ayude.
Una forma alternativa también será útil en algunos casos. Podemos ejecutar consultas raw
dentro de la función de select
. Aquí hay un ejemplo:
$feature_project = FeatureProject::select(DB::raw(''GROUP_CONCAT("feature_id")))
->where(''project_id'', $project->id)
->get();
En DB::raw
podemos ejecutar la consulta mysql con función y caso igual que la consulta mysql.
Use pluck()
:
$feature_project = FeatureProject::where(''project_id'', $project->id)->pluck(''feature_id'');
Puede llamar al método pluck()
en el generador de consultas.
$feature_project = FeatureProject::select(''feature_id'')
->where(''project_id'', $project->id)
->pluck(''feature_id''); // [2,4,9]
https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Builder.html#method_lists
Alternativamente, puede usar la función array_column()
PHP para matrices en bruto. http://php.net/manual/en/function.array-column.php