默认情况下,Laravel的原始查询方法将结果作为stdClass对象的数组返回:
Array
(
[0] => stdClass Object
(
[id] => 1
[username] => admin
[password] => admin123
[email] => admin@admin.com
[created_at] => 2012-12-06 18:57:19
[updated_at] => 2012-12-06 00:00:00
)
[1] => stdClass Object
(
[id] => 2
[username] => userna
[password] => user
[email] => user@gmail.com
[created_at] => 2012-12-06 00:00:00
[updated_at] => 2012-12-05 00:00:00
)
)
问题是如何让Laravel返回一个数组数组:
Array
(
[0] => Array
(
[id] => 1
[username] => admin
[password] => admin123
[email] => admin@admin.com
[created_at] => 2012-12-06 18:57:19
[updated_at] => 2012-12-06 00:00:00
)
[1] => Array
(
[id] => 2
[username] => userna
[password] => user
[email] => user@gmail.com
[created_at] => 2012-12-06 00:00:00
[updated_at] => 2012-12-05 00:00:00
)
)
答案 0 :(得分:36)
您也可以通过更改
将所有结果始终作为数组应用/配置/ database.php中
'fetch' => PDO::FETCH_CLASS,
在第31行到
'fetch' => PDO::FETCH_ASSOC,
答案 1 :(得分:19)
Eloquent有一个方法to_array()
来自docs:
to_array方法将自动获取所有属性 你的模型,以及任何加载的关系。
$user = User::find($id);
return Response::json($user->to_array());
或
return Response::eloquent($user);
如果您使用的是流畅的,您可以按照Sinan的建议进行操作,并更改全局配置以返回关联数组而不是对象。
或者,您可以将对象转换为JSON以及将对象转换为数组,尽管在大多数情况下全局选项更可取。您可以在通常喜欢对象的项目中使用以下项目,但在某些边缘情况下需要一个数组。这种方法不能与Eloquent一起使用,在这种情况下使用上述方法。
$users = DB::table('users')->where('name', '=', 'david')->get();
return array_map(function($val)
{
return json_decode(json_encode($val), true)
}, $users);
另一种选择是临时更改运行时配置
Config::set('database.fetch', PDO::FETCH_ASSOC);
在Laravel 4以后,所有方法名称都符合PSR-2标准。
$user = User::findOrFail($id);
return Response::json($user->toArray());
// In Laravel 5 onward the functions are preferred to facades.
return response()->json($user->toArray());
答案 2 :(得分:11)
我不知道laravel是否具有用于将结果作为数组返回的内置函数,但如果没有,则可以使用此代码段:
$data
是您返回的对象数组
$data = json_decode(json_encode((array) $data), true);