我尝试使用数组而不是集合,就像Laravel那样。
我试图这样做,没有成功:
Event::listen(StatementPrepared::class, function ($event) {
$event->statement->setFetchMode(...);
});
如https://laravel.com/docs/5.4/upgrade#upgrade-5.4.0所述,但它不起作用......
我也试过这样做:
DB::table('users')->where([...])->take(1)->get()->toArray();
但它正在做:
Array ( [0] => stdClass Object ( [uid] => 1 [...]) )
我知道在论坛上有更多关于它的内容,但它们都已经过时了。
由于
答案 0 :(得分:2)
toArray
正在将对象集合更改为对象数组,就像它应该的那样。如果您希望集合中的对象也是数组,则需要先转换每个对象:
$collection = DB::table('users')->where([...])->take(1)->get();
$array = $collection->map(function($obj){
return (array) $obj;
})->toArray();
要在整个应用中使用此功能,您可以在其中一个服务提供商的boot
方法中添加收藏宏:
Collection::macro('toArrays', function () {
return $this->map(function ($value) {
return (array) $value;
})->toArray();
});
这位于服务提供商文件的顶部:
use Illuminate\Support\Collection;
然后,只要您获得一组数据库结果,就可以在其上调用toArrays
:
DB::table('users')->where([...])->get()->toArrays();
答案 1 :(得分:0)
由于您只获得一个对象,请使用first()
方法:
$object = DB::table('users')->where([...])->first();
$array = (array)$object;
答案 2 :(得分:0)
您可以使用Laravel Collection的map method将每个对象转换为数组。