How to retrieve a result set from a raw query as an array instead of an object in Laravel 3

有些话、适合烂在心里 提交于 2019-12-21 03:13:04

问题


By default, Laravel's raw query methods return results as arrays of stdClass objects:

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [username] => admin
            [password] => admin123
            [email] => admin@admin.com
            [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] => user@gmail.com
            [created_at] => 2012-12-06 00:00:00
            [updated_at] => 2012-12-05 00:00:00
        )
)

The question is how to have Laravel return an array of Arrays instead:

   Array
    (
        [0] => Array
            (
                [id] => 1
                [username] => admin
                [password] => admin123
                [email] => admin@admin.com
                [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] => user@gmail.com
                [created_at] => 2012-12-06 00:00:00
                [updated_at] => 2012-12-05 00:00:00
            )
    )

回答1:


Original answer for Laravel 3

Eloquent has a method to_array()

From docs:

The to_array method will automatically grab all of the attributes on your model, as well as any loaded relationships.

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

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

or

return Response::eloquent($user);

If you are using fluent, you can do as Sinan suggested and change the global configuration to return an associative array rather than objects.

Alternatively, you can convert an object to and from JSON to convert it to an array although the global option would be preferable in most cases. You can use the following in projects where you prefer objects normally but in certain edge cases need an array. This method will not play well with Eloquent, use the methods above in that case.

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

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

Another option would be to temporarily change the runtime configuration

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

For Laravel ~4

In Laravel 4 onwards, all method names conform to PSR-2 standards.

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

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

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



回答2:


You may also get all the result always as array by changing

application/config/database.php

'fetch' => PDO::FETCH_CLASS,

on line 31 to

'fetch' => PDO::FETCH_ASSOC,



回答3:


I don't know if laravel has in built function for returning results as array but if not you can use this snippet:

Where $data is your returned array of objects

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


来源:https://stackoverflow.com/questions/13746199/how-to-retrieve-a-result-set-from-a-raw-query-as-an-array-instead-of-an-object-i

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!