我有三个模型,Companies、events 和 assistances,其中 assistances 表存储event_id和company_id。我希望得到一个查询,其中存储了公司对某类事件的总援助。然而,由于所有这些计数都链接到同一个表,我并不知道如何有效地构建这个查询。我把每种事件的助手的id存储在一些数组中,然后我做以下事情:
$query = $this->Companies->find('all')->where($conditions)->order(['name' => 'ASC']);
$query
->select(['total_assistances' => $query->func()->count('DISTINCT(Assistances.id)')])
->leftJoinWith('Assistances')
->group(['Companies.id'])
->autoFields(true);
然而,我不知道如何获得其余的Assistance计数,因为我需要计算的不是所有不同的Assistance Id,而只是那些符合某些条件的Assistance Id,比如->select(['assistances_conferences' => $query->func()->count('DISTINCT(Assistances.id)')])->where($conferencesConditions)
(但是很明显前一行不起作用。有没有办法在查询本身中统计不同种类的协助?我需要这样做,因为我计划使用分页,并考虑这些字段对表进行排序)。
1条答案
按热度按时间wd2eg0qa1#
*JoinWith()
方法接受第二个参数,即接收用于影响选择列表的查询构建器的回调,以及连接的条件。这将生成一个如下所示的连接语句,该语句将只包含(并因此计算)
1
或2
的event_id
的Assistances
:传递给回调函数的查询构建器实际上只支持选择字段和添加条件,需要在主查询上定义更复杂的语句,或者您可能必须切换到使用子查询。
另请参阅
*Cookbook〉数据库访问和ORM〉查询生成器〉按关联数据筛选