数据库查询构建器toArray()laravel 4

Fab*_*lio 38 query-builder laravel-4

我正在尝试使用该方法将查询转换为数组,toArray()但它不适用于查询构建器.转换的任何想法吗?

DB::table('user')->where('name',=,'Jhon')->get()->toArray();
Run Code Online (Sandbox Code Playgroud)

pet*_*tas 50

toArray是Eloquent的模型方法,所以你需要一个Eloquent模型,试试这个:

 User::where('name', '=', 'Jhon')->get()->toArray();
Run Code Online (Sandbox Code Playgroud)

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

  • 如果我被迫使用Fluent怎么办?我需要阅读数以千计的行,这些行效率不高!这给了我最大的执行时间,而Fluent没有 (11认同)

Som*_*atd 43

如果您更喜欢使用查询生成器而不是Eloquent,那么这里就是解决方案

$result = DB::table('user')->where('name',=,'Jhon')->get();
Run Code Online (Sandbox Code Playgroud)

第一解决方案

$array = (array) $result;
Run Code Online (Sandbox Code Playgroud)

二解决方案

$array = get_object_vars($result);
Run Code Online (Sandbox Code Playgroud)

第三解决方案

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

希望它可能有所帮助

  • 第三个解加1;它非常适合我(y) (4认同)

ale*_*exw 14

请注意,从Laravel 5.4开始,显然不再支持下面提供的选项(感谢@Alex).

在Laravel 5.3及更低版本中,有一种方法可以为选择查询设置获取模式.

在这种情况下,执行以下操作可能更有效:

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

这样,您就不会浪费时间创建对象,然后将它们转换回数组.

  • 从Laravel 5.4开始,此[不再有效](https://github.com/laravel/framework/issues/17728). (3认同)

mnv*_*mnv 7

还有另一个解决方案

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

如果您只需要实体中的几列,这很好。