我正在尝试使用方法toArray()
将查询转换为数组,但它不适用于查询构建器。转换它的想法吗?
实施例
DB::table('user')->where('name',=,'Jhon')->get()->toArray();
答案 0 :(得分:48)
toArray是Eloquent的模型方法,所以你需要一个Eloquent模型,试试这个:
User::where('name', '=', 'Jhon')->get()->toArray();
答案 1 :(得分:42)
如果您更喜欢使用查询生成器而不是Eloquent,那么解决方案
$result = DB::table('user')->where('name',=,'Jhon')->get();
第一个解决方案
$array = (array) $result;
第二个解决方案
$array = get_object_vars($result);
第三种解决方案
$array = json_decode(json_encode($result), true);
希望它可以提供帮助
答案 2 :(得分:14)
请注意,从Laravel 5.4开始,显然不再支持下面显示的选项(感谢@Alex)。
在Laravel 5.3及更低版本中,有set the fetch mode选择查询的方法。
在这种情况下,执行起来可能更有效:
DB::connection()->setFetchMode(PDO::FETCH_ASSOC);
$result = DB::table('user')->where('name',=,'Jhon')->get();
这样,您就不会浪费时间创建对象,然后将它们转换回数组。
答案 3 :(得分:3)
另一个解决方案
$objectData = DB::table('user')
->select('column1', 'column2')
->where('name', '=', 'Jhon')
->get();
$arrayData = array_map(function($item) {
return (array)$item;
}, $objectData);
如果您只需要实体中的多个列,那就太好了。
答案 4 :(得分:0)
您可以使用查询构建器执行此操作。只需使用SELECT而不是TABLE和GET。
DB::select('select * from user where name = ?',['Jhon']);
注意: 1.允许多个问号。 2.即使只有一个参数,第二个参数也必须是数组。 3. Laravel会自动清理参数,所以你没必要。
此处的详细信息:http://laravel.com/docs/5.0/database#running-queries
嗯,当我不使用where子句时,结果仍然为我返回一个标准类。我发现这有帮助:foreach($results as $result)
{
print_r(get_object_vars($result));
}
但是,get_object_vars不是递归的,所以不要在$ results上使用它。
答案 5 :(得分:0)
尝试这个
DB::table('user')->where('name','Jhon')->get();
只需删除" ="标志 。 。 。因为你正在尝试排列名称' jhon' 。 。 。 。 。 。 。我希望它对你有所帮助。
答案 6 :(得分:0)
最简单的方法是使用laravel toArray函数本身:
$result = array_map(function ($value) {
return $value instanceof Arrayable ? $value->toArray() : $value;
}, $result);
答案 7 :(得分:0)
在 Laravel 5.6 中测试
最快最简单的方法就是使用json_decode(不需要使用json_encode),例子:
$records = DB::table('user')->where('name',=,'Jhon')->get();
echo json_decode($records,true);