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

假设现在有一个文章表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']
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容