web-dev-qa-db-fra.com

Comment récupérer un jeu de résultats à partir d'une requête brute en tant que tableau au lieu d'un objet dans Laravel 3

Par défaut, les méthodes de requête brutes de Laravel retournent les résultats sous forme de tableaux d'objets stdClass:

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [username] => admin
            [password] => admin123
            [email] => [email protected]
            [created_at] => 2012-12-06 18:57:19
            [updated_at] => 2012-12-06 00:00:00
        )

    [1] => stdClass Object
        (
            [id] => 2
            [username] => userna
            [password] => user
            [email] => [email protected]
            [created_at] => 2012-12-06 00:00:00
            [updated_at] => 2012-12-05 00:00:00
        )
)

La question est de savoir comment avoir Laravel retourner un tableau de tableaux à la place:

   Array
    (
        [0] => Array
            (
                [id] => 1
                [username] => admin
                [password] => admin123
                [email] => [email protected]
                [created_at] => 2012-12-06 18:57:19
                [updated_at] => 2012-12-06 00:00:00
            )

        [1] => Array
            (
                [id] => 2
                [username] => userna
                [password] => user
                [email] => [email protected]
                [created_at] => 2012-12-06 00:00:00
                [updated_at] => 2012-12-05 00:00:00
            )
    )
29
Ramesh

Réponse originale pour Laravel 3

Eloquent a une méthode to_array()

Depuis les documents:

La méthode to_array récupérera automatiquement tous les attributs de votre modèle, ainsi que toutes les relations chargées.

$user = User::find($id);

return Response::json($user->to_array());

ou

return Response::eloquent($user);

Si vous utilisez couramment, vous pouvez faire comme suggéré par Sinan et modifier la configuration globale pour renvoyer un tableau associatif plutôt que des objets.

Alternativement, vous pouvez convertir un objet vers et depuis JSON pour le convertir en un tableau bien que l'option globale soit préférable dans la plupart des cas. Vous pouvez utiliser les éléments suivants dans les projets où vous préférez les objets normalement mais dans certains cas Edge, vous avez besoin d'un tableau. Cette méthode ne fonctionnera pas bien avec Eloquent, utilisez les méthodes ci-dessus dans ce cas.

$users = DB::table('users')->where('name', '=', 'david')->get();

return array_map(function($val)
{
    return json_decode(json_encode($val), true)
}, $users);

Une autre option serait de modifier temporairement la configuration d'exécution

Config::set('database.fetch', PDO::FETCH_ASSOC);

Pour Laravel ~ 4

Dans Laravel à partir de 4, tous les noms de méthode sont conformes aux normes PSR-2.

$user = User::findOrFail($id);

return Response::json($user->toArray());

// In Laravel 5 onward the functions are preferred to facades.
return response()->json($user->toArray());
19
David Barker

Vous pouvez également obtenir tous les résultats sous forme de tableau en changeant

application/config/database.php

'fetch' => PDO::FETCH_CLASS,

sur la ligne 31 à

'fetch' => PDO::FETCH_ASSOC,
36
Sinan Eldem

Je ne sais pas si laravel a une fonction intégrée pour renvoyer les résultats sous forme de tableau mais sinon, vous pouvez utiliser cet extrait:

$data est votre tableau d'objets renvoyé

$data = json_decode(json_encode((array) $data), true);
11
Dale