J'ai une grosse instruction SQL que j'exécute comme ceci:
$result = DB::select($sql);
Par exemple
$result = DB::select('select * from users');
J'aimerais que le résultat soit un tableau - mais pour le moment, il retourne une structure comme celle-ci, un tableau avec des objets ...
Array
(
0 => stdClass::__set_state(array(
'id' => 1,
'first_name' => 'Pavel',
'created_at' => '2015-02-23 05:46:33',
)),
1 => stdClass::__set_state(array(
'id' => 2,
'first_name' => 'Eugene',
'created_at' => '2016-02-23 05:46:34',
)),
...etc...
)
On dirait que vous devez convertir les objets stdClass en tant que tableau afin que vous puissiez avoir la structure que vous recherchez.
$result = array_map(function ($value) {
return (array)$value;
}, $result);
Les meilleures solutions en matière de performances consisteraient à modifier la méthode de récupération des données dans la base de données:
// get original model
$fetchMode = DB::getFetchMode();
// set mode to custom
DB::setFetchMode(\PDO::FETCH_ASSOC);
// get data
$result = DB::select($sql);
// restore mode the original
DB::setFetchMode($fetchMode);
Évidemment, si vous voulez obtenir toutes les données sous forme de tableau, il vous suffira de changer dans config/database.php
de:
'fetch' => PDO::FETCH_CLASS,
dans
'fetch' => PDO::FETCH_ASSOC,
puis en cours d'exécution uniquement:
$result = DB::select($sql);
vous retournera un tableau multidimensionnel au lieu d'un tableau d'objets
toArray()
method convertit la collection en tableau. Les modèles sont également convertis en tableaux:
La méthode
toArray
convertit la collection en un tableau simple PHP . Si les valeurs de la collection sont des modèlesEloquent
, les modèles le seront également être converti en tableaux
Donc, je suppose que vous faites quelque chose de mal. Si vous souhaitez plus d'aide, veuillez mettre à jour votre question avec tous les codes associés.
De plus, seules les collections Eloquent (modèles) ont la méthode toArray()
.
Pour utiliser cette méthode, utilisez Eloquent:
$result = \App\User::all()->toArray();
Pour laravel/Lumen 5.4 (qui utilise illuminate/database 5.4):
$pdo = DB::getPdo();
$statement = $pdo->prepare($yourQuery);
$statement->setFetchMode(\PDO::FETCH_ASSOC);
$statement->execute();
$results = $statement->fetchAll();
Ou écouter Illuminate\Database\Events\StatementPréparé: Laravel 5.4 - Comment définir le mode de récupération PDO?
Voici une autre approche qui mérite d’être mentionnée:
$resultArray = json_decode(json_encode($result), true);
Cela fonctionne, j'ai vérifié.
Essaye ça
$result = DB::select($sql);
$arr = [];
foreach($result as $row)
{
$arr[] = (array) $row;
}
Vous pouvez faire de cette façon ..
Au sommet
use DB;
use PDO;
--------------------
DB::setFetchMode(PDO::FETCH_ASSOC); // Set the fetch mode as array
$result = DB::select('select * from users');
Par exemple, vous pouvez maintenant obtenir un résultat de cette façon.
$first_email = $result[0]['email'];
Vous pouvez maintenant passer en mode de récupération par défaut.
DB::setFetchMode(PDO::FETCH_CLASS);
Le moyen le plus simple consiste à utiliser la fonction laravel toArray:
public function toArray()
{
return array_map(function ($value) {
return $value instanceof Arrayable ? $value->toArray() : $value;
}, $this->items);
}
tu peux essayer ça
DB::table('commune')->where('Commune','<>', 'ND')->orderBy('Commune')->get()->pluck('Commune');
Un moyen simple et délicat:
//Got array in stdClass converting to JSON
$temp1= json_encode($result);
//JSON to Array
$temp2= json_decode($temp1,1);
Peut-être que cela vous aidera