PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集

QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > CMS教程 > Fastadmin

仿照withCount封装withSum方法

管理员 2024-12-14
Fastadmin
67

今天群里小伙伴遇到一个问题,大致想实现这样的.
一个主表,一个附表,主表对应附表是一对多的关系.在查询主表的时候想关联附表的其中的字段总和做一个排序.
以我写的小demo为例,一个投票的程序,活动对应投票记录.在活动主表没有统计总票数的情况下查询出总票数并排序.
首先封装withSum方法,摘自仿照thinkphp5提供的withCount()方法封装withSum().

thinkphplibrarythinkdbQuery.php

添加

public function withSum($relation, $subQuery = true, $sum='sum'){    if (!$subQuery) {        $this->options['with_sum'] = $relation;    } else {        $relations = is_string($relation) ? explode(',', $relation) : $relation;        if (!isset($this->options['field'])) {            $this->field('*');        }        foreach ($relations as $key => $relation) {            $closure = false;            if ($relation instanceof Closure) {                $closure  = $relation;                $relation = $key;            }            $relation = Loader::parseName($relation, 1, false);            $count    = '(' . $this->model->$relation()->getRelationSumQuery($closure, $sum) . ')';            $this->field([$count => Loader::parseName($relation) . '_sum']);        }    }    return $this;}

thinkphplibrarythinkmodelrelationHasMany.php添加

public function getRelationSumQuery($closure, $sum){    if ($closure) {        call_user_func_array($closure, [ & $this->query]);    }    $localKey = $this->localKey ?: $this->parent->getPk();    return $this->query->whereExp($this->foreignKey, '=' . $this->parent->getTable() . '.' . $localKey)->fetchSql()->sum($sum);}

主表模型里添加关联方法,参考
!a5b10689d73a8532dd21ebca89a5e244.png

控制器里index方法修改,参考
bd06e171511d6dd7fec9d695058ad949.png

然后刷新表格查看返回的数据
bd06e171511d6dd7fec9d695058ad949.png

可以看到新增加的这个总数的字段了.

对应修改js排序!
2e0861844e5faf1671d456a1e9aa3a9b.png

ok,搞定了!


本文关键词:

希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, LeCMS, ClassCMS, Fastadmin, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部