Laravel 4 DB查询生成器toArray()laravel 4

Laravel 4 DB查询生成器toArray()laravel 4,laravel-4,query-builder,Laravel 4,Query Builder,我正在尝试使用方法toArray()将查询转换为数组,但它不适用于查询生成器。有什么想法吗 范例 DB::table('user')->where('name',=,'Jhon')->get()->toArray(); toArray是一个雄辩的模型方法,因此您需要一个雄辩的模型,请尝试以下方法: User::where('name', '=', 'Jhon')->get()->toArray(); 您可以使用查询生成器执行此操作。只需使用SELECT而不是T

我正在尝试使用方法
toArray()
将查询转换为数组,但它不适用于查询生成器。有什么想法吗

范例

DB::table('user')->where('name',=,'Jhon')->get()->toArray();

toArray是一个雄辩的模型方法,因此您需要一个雄辩的模型,请尝试以下方法:

 User::where('name', '=', 'Jhon')->get()->toArray();

您可以使用查询生成器执行此操作。只需使用SELECT而不是TABLE和GET

DB::select('select * from user where name = ?',['Jhon']);
注: 1.允许多个问号。 2.第二个参数必须是数组,即使只有一个参数。 3.Laravel将自动清理参数,因此您不必这样做

更多信息请点击此处:

嗯,当我不使用where子句时,它仍然为我返回一个标准类。我发现这有帮助:

foreach($results as $result)
{
print_r(get_object_vars($result));
}

然而,get_object_vars不是递归的,所以不要在$results上使用它

如果您更喜欢使用查询生成器而不是雄辩,以下是解决方案

$result = DB::table('user')->where('name',=,'Jhon')->get();
第一个解决方案

$array = (array) $result;
$array = get_object_vars($result);
$array = json_decode(json_encode($result), true);
第二种解决方案

$array = (array) $result;
$array = get_object_vars($result);
$array = json_decode(json_encode($result), true);
第三种解决方案

$array = (array) $result;
$array = get_object_vars($result);
$array = json_decode(json_encode($result), true);

希望它能有所帮助

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

在Laravel5.3及以下版本中,有一种用于选择查询的方法

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

DB::connection()->setFetchMode(PDO::FETCH_ASSOC);
$result = DB::table('user')->where('name',=,'Jhon')->get();
这样,您就不会浪费时间创建对象,然后再将它们转换回数组。

还有另一种解决方案

$objectData = DB::table('user')
    ->select('column1', 'column2')
    ->where('name', '=', 'Jhon')
    ->get();
$arrayData = array_map(function($item) {
    return (array)$item; 
}, $objectData->toArray());
当您只需要实体中的几列时,这很好。

试试这一列

DB::table('user')->where('name','Jhon')->get();

只需删除“=”符号。因为您正试图数组只是名称“jhon”。我希望这对你有帮助

最简单的方法是使用laravel toArray函数本身:

    $result = array_map(function ($value) {
        return $value instanceof Arrayable ? $value->toArray() : $value;
    }, $result);
在Laravel 5.6中测试

最快、最简单的方法就是使用json_解码(无需使用json_编码),例如:

$records = DB::table('user')->where('name',=,'Jhon')->get();

echo json_decode($records,true);

如果我被迫使用Fluent怎么办?我需要阅读数千行,这是没有效率的雄辩!!!这给了我最长的执行时间,而Fluent不为第一个解决方案加1!。我认为这是最干净的方法!第三种方案加1;真不敢相信我花了这么长时间才找到你的答案!非常感谢分享;对我来说,“第三种解决方案”是最好的解决方案,thanks@JonasWebDev我也一样<代码>第三种解决方案工作完美无瑕。我想知道,与直接使用雄辩的方法相比,它的任务成本是否更低?从Laravel 5.4开始,获得数组数组(而不是stdClass对象数组)的唯一方法是这种方法。这种方法只能获得集合。不是数组。问题是toArray()需要更改$objectData->toArray()才能工作