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()才能工作