web-dev-qa-db-fra.com

Constructeur de requêtes de base de données toArray () laravel 4

J'essaie de convertir une requête en un tableau avec la méthode toArray() mais cela ne fonctionne pas pour le générateur de requêtes. Des idées pour le convertir?

Exemple

DB::table('user')->where('name',=,'Jhon')->get()->toArray();
29
Fabrizio Fenoglio

toArray est une méthode modèle d'Eloquent. Vous devez donc utiliser un modèle Eloquent. Essayez ceci:

 User::where('name', '=', 'Jhon')->get()->toArray();

http://laravel.com/docs/eloquent#collections

42
petkostas

Si vous préférez utiliser Query Builder au lieu d’Eloquent, voici les solutions

$result = DB::table('user')->where('name',=,'Jhon')->get();

Première solution

$array = (array) $result;

Deuxième solution

$array = get_object_vars($result);

Troisième solution

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

espérons que cela peut aider

37
Somwang Souksavatd

Veuillez noter que l'option présentée ci-dessous n'est apparemment plus supportée à partir de Laravel 5.4 (merci @Alex).

Dans Laravel 5.3 et inférieur, il existe une méthode pour définir le mode de récupération pour les requêtes sélectionnées.

Dans ce cas, il pourrait être plus efficace de faire:

DB::connection()->setFetchMode(PDO::FETCH_ASSOC);
$result = DB::table('user')->where('name',=,'Jhon')->get();

De cette façon, vous ne perdrez pas de temps à créer des objets puis à les reconvertir en tableaux.

14
alexw

Et une autre solution

$objectData = DB::table('user')
    ->select('column1', 'column2')
    ->where('name', '=', 'Jhon')
    ->get();
$arrayData = array_map(function($item) {
    return (array)$item; 
}, $objectData);

C'est bien dans le cas où vous n'avez besoin que de plusieurs colonnes d'une entité.

3
mnv

Le moyen le plus simple consiste à utiliser la fonction laravel toArray elle-même:

    $result = array_map(function ($value) {
        return $value instanceof Arrayable ? $value->toArray() : $value;
    }, $result);
0
Mohsen

essaye celui-là

DB::table('user')->where('name','Jhon')->get();

supprimez simplement le signe "=". . . .parce que vous essayez de simplement nommer 'jhon'. . . . . . . J'espère que cela vous aidera. .

0

Vous pouvez le faire en utilisant le générateur de requêtes. Utilisez simplement SELECT au lieu de TABLE et GET.

DB::select('select * from user where name = ?',['Jhon']);

Remarques: 1. Plusieurs points d'interrogation sont autorisés . 2. Le deuxième paramètre doit être un tableau, même s'il n'y a qu'un seul paramètre . 3. Laravel nettoie automatiquement les paramètres, pour que vous n'ayez pas à le faire.

Plus d'informations ici: http://laravel.com/docs/5.0/database#running-queries

Hmmmmmm, il s'avère que retourne toujours une classe standard pour moi quand je n'utilise pas de clause where. J'ai trouvé cela aidé:

foreach($results as $result)
{
print_r(get_object_vars($result));
}

Cependant, get_object_vars n'est pas récursif, ne l'utilisez donc pas dans $ results. 

0