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

时间:2013-12-25 20:50:44

标签: laravel-4 query-builder

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

实施例

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

8 个答案:

答案 0 :(得分:48)

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

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

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

答案 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);