thinkphp利用模型关联来做关联统计
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thinkphp利用模型关联来做关联统计相关的知识,希望对你有一定的参考价值。
参考技术A 有些时候,并不需要获取关联数据,而只是希望获取关联数据的统计。
例如用户模型与用户充值订单模型,
想知道用户充值了多少次,则用 withCount ,
想知道用户充值了多少钱,则用 withSum ,
想知道充值的最大一笔的金额用 withMax ,
想知道充值的最小一笔的金额用 withMin ,
想知道充值的平均的金额 withAvg
User模型用增加一对多模型关联
控制器中调用,关联统计功能会在模型的对象属性中自动添加一个以“关联方法名+_方法”(支持自定义)为名称的动态属性来保存相关的关联统计数据。
以上方法都是默认用了子查询,如果想
withCount()
生成的sql语句是
如果不用子查询,withCount()第二个参数填false,withSum,withMax,withMin,withAvg第三个参数填false,
生成的sql语句是
学习ThinkPHP的第21天---关联预载入关联统计
ThinkPHP关联预载入
预载入的作用是减少执行SQL语句,进而提升程序的性能。
public function join(){ //用于监听SQL Db::listen(function ($sql, $time, $explain) { // 记录SQL echo $sql . ‘ [‘ . $time . ‘s]<br>‘; // 查看性能分析结果 //dump($explain); }); //$brand = Brand::all([3,4]);//未预载入 程序执行了5句SQL语句 $brand = Brand::with(‘goods‘)->select([3,4]);//预载入后 程序执行了4句SQL语句 foreach($brand as $b){ foreach($b->goods as $good){ echo $good->goods_name.":".$good->price."元<br>"; } } }
ThinkPHP关联统计
关联统计只能用在一对多和一对多上,一对一的话还有上面好统计的。。。关联统计有相关的统计函数,除了whitCount()函数以外其他的统计函数都需要指定字段!!!
统计商品对应的数量
public function join(){ $brand = Brand::withCount(‘goods‘)->select([3,4]); foreach($brand as $b){ //“方法名+_count”为系统自动生成的自动用于存储统计的值,也可自定义 echo "品牌:"$b->brand_name."有"$b->goods_count."个商品<br>": } }
统计商品中的最大值withMax()
public function join(){ $brand = Brand::withMax(‘good‘,‘price‘)->select(); foreach($brand as $value){ echo $value->brand_name"的品牌中最贵的商品价格为:".$value->goods_max; } }
其它的统计方法
其它的统计方法有一下几种,其使用方法与上面类似
关联统计的方法 | 描述 |
withSum |
求和 |
withAvg | 求平均值 |
withMax | 求最大值 |
withMin | 求最小值 |
以上是关于thinkphp利用模型关联来做关联统计的主要内容,如果未能解决你的问题,请参考以下文章