美文网首页
TP关联预加载处理特殊查询归类及分页问题

TP关联预加载处理特殊查询归类及分页问题

作者: 无聊的电风扇 | 来源:发表于2020-10-30 10:52 被阅读0次

    假设现在有一个文章表article,一个分类表category,
    一篇文章多个分类,绑定关系在分类表中
    现需要一个文章列表,但是每篇文章的data里要包含他的全部分类信息,并且根据文章信息分页
    肯定有一大部分人,会偷偷摸摸的先查出来所有文章再循环查询分类信息
    类似这样

     $list = $articlle->paginate(20);
    foreach($list->items as $k => $v){
      $list->items[$k] = $category->where('articleid',$v['id'])->select();
    }
    

    那这种情况,且不说执行速度的问题,如果查询条件有分类信息咋整,估计又要再循环一遍……

    其实可以用TP自带的一个关联预加载功能,类似于先建立一个几个表联合的临时视图表,再对这个表处理

    先建立模型

    public function aaa(){
            return $this->belongsTo('ABCModel', 'abc_id')->setEagerlyType(1);  //一对一用这个
        }
    public function bbb(){
            return $this->hasMany('DEFModel', 'def_id', 'id'); //一对多用这个
        }
    

    在程序中用with()加载模型后,就可以正常操作了

    $data = $mod->with(['aaa','bbb'])
            ->field('a,b,c')
            ->paginate(20);
    

    也可以

    $data = $mod->with(['aaa' => function (Query $query) use ($info){
                 if (!empty($info['name'])) {
                     $query->where('name', '=', $info['name']);
                 }
    
             },'bbb'])->where($where)->paginate(20);
    

    最后结果就是类似这样

    ['文章1'=>['分类一','分类二'],'文章2']
    

    相关文章

      网友评论

          本文标题:TP关联预加载处理特殊查询归类及分页问题

          本文链接:https://www.haomeiwen.com/subject/bzgkvktx.html