31

默认情况下,Laravel 的原始查询方法以 stdClass 对象数组的形式返回结果:

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

问题是如何让 Laravel 返回一个数组数组:

   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
            )
    )
4

3 回答 3

36

您也可以通过更改将所有结果始终作为数组

应用程序/配置/数据库.php

'fetch' => PDO::FETCH_CLASS,

在第 31 行到

'fetch' => PDO::FETCH_ASSOC,
于 2012-12-06T16:01:32.417 回答
21

Laravel 3 的原始答案

Eloquent 有方法to_array()

来自文档:

to_array 方法将自动获取模型上的所有属性,以及任何加载的关系。

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

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

或者

return Response::eloquent($user);

如果您使用的是 fluent,您可以按照 Sinan 的建议进行操作并更改全局配置以返回关联数组而不是对象。

或者,您可以将对象与 JSON 相互转换以将其转换为数组,尽管在大多数情况下全局选项会更可取。您可以在通常更喜欢对象但在某些极端情况下需要数组的项目中使用以下内容。这种方法在 Eloquent 上效果不好,在这种情况下使用上面的方法。

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

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

另一种选择是临时更改运行时配置

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

对于 Laravel ~4

从 Laravel 4 开始,所有方法名称都符合 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());
于 2012-12-06T15:10:09.447 回答
11

我不知道 laravel 是否具有将结果作为数组返回的内置函数,但如果没有,您可以使用以下代码段:

$data您返回的对象数组在哪里

$data = json_decode(json_encode((array) $data), true);
于 2012-12-06T15:01:40.323 回答