laravel扩展方法的使用,数据库操作

在App/Http/Providers目录下面新增DbServiceProvider.php

完整代码如下:

<?php

namespace App\Providers;

use Illuminate\Database\Query\Builder as QueryBuilder;
use Illuminate\Support\ServiceProvider;

class DbServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //扩展自定义索引方法
        QueryBuilder::macro('cates',function ($index){
            $res = $this->lists();
            //构造一个新的数组,满足新的数组的下标是自己自定义传进来的$index的值
            $result=[];
            foreach ($res as $key=>$val){
                $result[$val[$index]]=(array)$val;
            }
            return $result;
        });

        //扩展列表方法
        QueryBuilder::macro('lists',function (){
            $res = $this->get()->all();
            $lists=[];
            foreach ($res as $val){
                $lists[]=(array)$val;
            }

            return $lists;
        });

        //扩展查询一条数据
        QueryBuilder::macro('item',function (){
            $res = $this->first();

            return $res?(array)$res:false;
        });

        //分页
        QueryBuilder::macro('pages',function ($pageSize,$appends=[]){
            $res=$this->paginate($pageSize);
            $articles=$res->items();
            $arr=[];
            foreach ($articles as $v){
                $arr[]=(array)$v;
            }
            //总条数
            $data['total']=$res->total();
            //分页
            $res=$res->onEachside(1);
            if ($appends){
                $res=$res->appends($appends);
            }
            $data['links']=$res->links('admins/public/paginate');
            $data['lists']=$arr;
            return $data;
        });
    }
}

记得最后需要在config下面的app.php注册

发表评论

电子邮件地址不会被公开。 必填项已用*标注