updateorcreate tablas findorfail espaƱol create consultar php laravel laravel-5 laravel-5.1 laravel-5.2

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'');