zoukankan      html  css  js  c++  java
  • 在laravel中使用mongodb

    1.安装jenssegers/mongodb

    composer require jenssegers/mongodb
    

    2.定义model

    class XXMODEL extends JenssegersMongodbEloquentModel implements Transformable
    {
        use TransformableTrait;
    
        protected $connection = 'CONNECTTION_NAME';
    
        protected $collection = 'COLLECTION_NAME';
    
        /**
         * The attributes that are mass assignable.
         *
         * @var array
         */
        protected $fillable = [];
    
    }
    

    3.列表+筛选+分类

    public function list($where){
    
            if (!empty($where['limit'])) {
                $limit = $where['limit'];
                unset($where['limit']);
            } else {
                $limit = config('repository.pagination.limit');
            }
            $data = XXMODEL::raw(function ($collection) use($limit,$where) {
                //条件
                $aggregate = array();
                //查询数组
                $selectArr = array();
                if(!empty($where['select']['keyword'])){
                    $selectArr['keyword'] = ['$regex' => ''. $where['select']['keyword'] . '', '$options' => "i"];
                }
                if(!empty($where['select']['city'])){
                    $selectArr['value.city'] = $where['select']['city'];
                }
                //聚合数组
                $groupArr = $groups = array();
                if(!empty($where['groups']['keyword'])){
                    $groupArr['keyword'] = '$keyword';
                }
                if(!empty($where['groups']['city'])){
                    $groupArr['city'] = '$value.city';
                }
                if(!empty($groupArr)){
                    $groups['_id'] = $groupArr;
                    $groups['sum_clicks'] = ['$sum' => '$click_nums'];
                }
    
                $aggregate[]['$match'] = $selectArr;
                if(!empty($groups)){
                    $aggregate[]['$group'] = $groups;
                }
                $count = sizeof($collection->aggregate($aggregate)->toArray());
                //先排序在分页
                if(!empty($where['groups']['date'])){
                    $sort = ['_id.date' => -1];
                }else{
                    $sort = ['date' => -1];
                }
                $aggregate[]['$sort'] = empty($where['sort']) ? $sort : [$where['sort']['name'] => $where['sort']['order']];
                $aggregate[]['$skip'] = ((empty($where['page']) ? 1 : $where['page'])-1) * $limit;
                $aggregate[]['$limit'] = $limit;
                //生成paginate分页的格式方便前端
                return new LengthAwarePaginator($collection->aggregate($aggregate)->toArray(), $count, $limit,!empty($where['page'])?$where['page']:1, [
                    'path' => Paginator::resolveCurrentPath(),
                    'pageName' => 'page',
                ]);
    
            });
            return $data;
    
        }
    

      

  • 相关阅读:
    如何判断哪个方法调用了相同的事件?
    Windows Update问题
    Android学习笔记
    关于官方Reachability Demo理解
    poj 1797 Heavy Transportation
    poj 3013 Big Christmas Tree
    poj 1062 昂贵的聘礼
    poj 3615 Cow Hurdles(floyd)
    CF Planets(STL+ 最短路)
    poj 3026 Borg Maze
  • 原文地址:https://www.cnblogs.com/paopaocheng/p/10138508.html
Copyright © 2011-2022 走看看