背景:laravel 中使用DB类查询结果是一个
stdClass Object
对象,基于PHP强大的数组功能,我们经常需要在视图中以数组方式进行渲染。
从上图可以看出,虽然laravel提供了
toArray()
方法,其实只是在外面套了个数组的壳,里面还是对象形式。
getArray()
,调用后直接转为数组呢?使用 laravel 服务提供者进行服务容器注册扩展就可以实现:步骤如下:1、使用 Artisan 命令行工具,通过 make:provider 命令可以生成一个新的提供者:
php artisan make:provider DBServiceProvider
在
app\Providers\
目录下会生成DBServiceProvider.php
文件,会有两个默认方法,register()
与boot()
,我们只需要对boot()
进行操作。
2、使用macro()
方法定义对象转数组逻辑代码
use Illuminate\Database\Query\Builder; //注意要引用Builder类
public function boot()
{
Builder::macro('getArray', function () {
$data = $this->get()->toArray();
$res = [];
foreach ($data as $key => $val) {
$res[$key] = (array)$val;
}
return $res;
});
}
3、在配置文件 config/app.php
进行注册
'providers' => [
App\Providers\DBServiceProvider::class,
]
这样,我们就可以直接使用DB对象进行链式调用
getArray()
方法了。