我想通过关联表的字段上的聚合函数进行排序,但是当我调试正在执行的SQL查询时,关联表PersonaHistory
甚至没有得到{{1我当然不会得到任何结果
有没有办法实现这个目标?
我可以强制在查询中加入表吗?
JOIN
DB:$query = $this->Personas->find('all')
->contain(['PersonaHistory'])
->order(['MAX(PersonaHistory.updated)' => 'ASC'])
->group('PersonaHistory.persona_id');
答案 0 :(得分:2)
好像Personas
通过PersonaHistory
与hasMany
相关联。只有hasOne
和belongsTo
关联会生成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');
}]);