如何从原始查询中检索结果集作为数组而不是Laravel 3中的对象

Ram*_*esh 30 php laravel laravel-3

默认情况下,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
        )
)
Run Code Online (Sandbox Code Playgroud)

问题是如何让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
            )
    )
Run Code Online (Sandbox Code Playgroud)

Sin*_*dem 36

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

应用/配置/ database.php中

'fetch' => PDO::FETCH_CLASS,
Run Code Online (Sandbox Code Playgroud)

在31号线到

'fetch' => PDO::FETCH_ASSOC,
Run Code Online (Sandbox Code Playgroud)

  • 不确定4或3,但在Laravel 5中,你可以进行查询:`$ query = DB :: table('companies') - > where('status','active');`然后在你之前设置它运行它``DB :: connection() - > setFetchMode(\ PDO :: FETCH_ASSOC);`然后得到结果`$ result = $ query-> get() - > toArray();`和`$ result`将是数组数组 (2认同)
  • @PhillipHarrington 这似乎已被删除:(`错误:调用未定义的方法 Illuminate\Database\MySqlConnection::setFetchMode()` (2认同)

Dav*_*ker 19

Laravel 3的原始答案

Eloquent有一种方法 to_array()

来自docs:

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

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

return Response::json($user->to_array());
Run Code Online (Sandbox Code Playgroud)

要么

return Response::eloquent($user);
Run Code Online (Sandbox Code Playgroud)

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

或者,您可以将对象转换为JSON以及将对象转换为数组,尽管在大多数情况下全局选项更可取.您可以在通常喜欢对象的项目中使用以下项目,但在某些边缘情况下需要一个数组.这种方法不能很好地与Eloquent一起使用,在这种情况下使用上述方法.

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

return array_map(function($val)
{
    return json_decode(json_encode($val), true)
}, $users);
Run Code Online (Sandbox Code Playgroud)

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

Config::set('database.fetch', PDO::FETCH_ASSOC);
Run Code Online (Sandbox Code Playgroud)

对于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());
Run Code Online (Sandbox Code Playgroud)


Dal*_*ale 11

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

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

$data = json_decode(json_encode((array) $data), true);
Run Code Online (Sandbox Code Playgroud)