web-dev-qa-db-fra.com

Laravel 5.1 DB: sélectionnez toArray ()

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...

)

12

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);
22
Jose Mujica

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

12
Marcin Nabiałek

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èles Eloquent, 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();
9
Alexey Mezenin

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?

1
Tobias Sette

Voici une autre approche qui mérite d’être mentionnée:

$resultArray = json_decode(json_encode($result), true);

Cela fonctionne, j'ai vérifié.

1

Essaye ça

$result = DB::select($sql);
$arr = [];
foreach($result as $row)
{
    $arr[] = (array) $row;
}
1
huuuk

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);
0
Parvez Rahaman

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);
}
0
Mohsen

tu peux essayer ça 

DB::table('commune')->where('Commune','<>', 'ND')->orderBy('Commune')->get()->pluck('Commune');
0
Mourad MAMASSI

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

0
Vish