Blogger Information
Blog 63
fans 8
comment 8
visits 50354
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
使用 laravel 服务提供者实现DB类扩展功能
周Sir-BLOG
Original
1196 people have browsed it

背景: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() 方法定义对象转数组逻辑代码

    1. use Illuminate\Database\Query\Builder; //注意要引用Builder类
    2. public function boot()
    3. {
    4. Builder::macro('getArray', function () {
    5. $data = $this->get()->toArray();
    6. $res = [];
    7. foreach ($data as $key => $val) {
    8. $res[$key] = (array)$val;
    9. }
    10. return $res;
    11. });
    12. }
  • 3、在配置文件 config/app.php 进行注册

  1. 'providers' => [
  2. App\Providers\DBServiceProvider::class,
  3. ]

这样,我们就可以直接使用DB对象进行链式调用 getArray() 方法了。

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post