如何通过关联的 table 字段上的聚合函数对 CakePHP 查询进行排序?
How to order a CakePHP query by an aggregate function on an associated table's field?
我想通过关联的 table 字段上的聚合函数进行排序,但是当我调试正在执行的 SQL 查询时,关联的 table、PersonaHistory
甚至没有得到 JOIN
ed,当然我也没有得到任何结果。
有办法实现吗?
我可以强制在查询中加入 table 吗?
$query = $this->Personas->find('all')
->contain(['PersonaHistory'])
->order(['MAX(PersonaHistory.updated)' => 'ASC'])
->group('PersonaHistory.persona_id');
数据库:Personas has many PersonaHistory
您的 table 名称需要复数化,您可以直接在关联的 table 字段上执行订单和分组
<?php $query = $this->Personas->find('all')->contain([
'PersonaHistories' => function ($q) {
return $q->order(['Max(updated)' => 'ASC'])
->group('persona_id');
}]);
看起来 Personas
通过 hasMany
与 PersonaHistory
相关。只有 hasOne
和 belongsTo
关联会产生 JOIN
语句。
解决方法是将您的查询重写为:
$query = $this->PersonaHistory->find('all')
->contain(['Personas'])
->order(['MAX(PersonaHistory.updated)' => 'ASC'])
->group('PersonaHistory.persona_id');
我想通过关联的 table 字段上的聚合函数进行排序,但是当我调试正在执行的 SQL 查询时,关联的 table、PersonaHistory
甚至没有得到 JOIN
ed,当然我也没有得到任何结果。
有办法实现吗?
我可以强制在查询中加入 table 吗?
$query = $this->Personas->find('all')
->contain(['PersonaHistory'])
->order(['MAX(PersonaHistory.updated)' => 'ASC'])
->group('PersonaHistory.persona_id');
数据库:Personas has many PersonaHistory
您的 table 名称需要复数化,您可以直接在关联的 table 字段上执行订单和分组
<?php $query = $this->Personas->find('all')->contain([
'PersonaHistories' => function ($q) {
return $q->order(['Max(updated)' => 'ASC'])
->group('persona_id');
}]);
看起来 Personas
通过 hasMany
与 PersonaHistory
相关。只有 hasOne
和 belongsTo
关联会产生 JOIN
语句。
解决方法是将您的查询重写为:
$query = $this->PersonaHistory->find('all')
->contain(['Personas'])
->order(['MAX(PersonaHistory.updated)' => 'ASC'])
->group('PersonaHistory.persona_id');