如何通过关联表的字段上的聚合函数来订购CakePHP查询?

时间:2015-12-28 23:21:53

标签: cakephp cakephp-3.0 query-builder

我想通过关联表的字段上的聚合函数进行排序,但是当我调试正在执行的SQL查询时,关联表PersonaHistory甚至没有得到{{1我当然不会得到任何结果 有没有办法实现这个目标?
我可以强制在查询中加入表吗?

JOIN

DB:$query = $this->Personas->find('all') ->contain(['PersonaHistory']) ->order(['MAX(PersonaHistory.updated)' => 'ASC']) ->group('PersonaHistory.persona_id');

2 个答案:

答案 0 :(得分:2)

好像Personas通过PersonaHistoryhasMany相关联。只有hasOnebelongsTo关联会生成JOIN语句。

解决方法是将查询重写为:

$query = $this->PersonaHistory->find('all')
    ->contain(['Personas'])
    ->order(['MAX(PersonaHistory.updated)' => 'ASC'])
    ->group('PersonaHistory.persona_id');  

答案 1 :(得分:0)

您的桌面名称需要加强,您可以直接在关联的表格字段上执行订单和分组

<?php $query = $this->Personas->find('all')->contain([
    'PersonaHistories' => function ($q) {
        return $q->order(['Max(updated)' => 'ASC'])
                 ->group('persona_id');
    }]);