【发布时间】:2021-06-26 21:25:48
【问题描述】:
我有三个关联模型,Clients 有许多 Preinvoices 并且属于一个 Group。我想将我对客户的查询限制为仅具有关联 Preinvoices 的客户(应用条件后,请参见下文)。
这是我正在做的事情的概要(我认为您可以忽略 Groups 部分)。
$clients = $this->Clients->find()
->order(['Groups.name' => 'ASC'])
->contain('Groups');
$clientPreinvoiceConditions = [
'Preinvoices.last_processed <' => $cutOffDateTime,
];
$clients->contain('Preinvoices', function (\Cake\ORM\Query $q) use ($clientPreinvoiceConditions) {
return $q
->where($clientPreinvoiceConditions);
});
到目前为止一切顺利——我正在获得一份完整的客户名单,其中包含符合条件的预发票。但是,最好只获取实际上有任何预发票的客户。
我想做这样的事情:
$clients->having(['COUNT(Preinvoices.id) >' => 0]);
但这似乎不太对劲。我得到了错误:
Unknown column 'Preinvoices.id' in 'having clause'
顺便说一句,尽管我确实在结果中得到了 Preinvoices.id。
我还尝试先选择计数作为自己的列,以便我可以在having() 中引用它,但没有成功:
$clients->select([
'preinvoiceCount' => 'COUNT(Preinvoices.id)'
]);
这给了我错误:
Unknown column 'Preinvoices.id' in 'field list'
Cake 中的复杂查询似乎总是难倒我。想法?
【问题讨论】:
-
很好,谢谢!
标签: cakephp-3.0