我在1:n关系中有两个模型,我只想加载相关项的计数。
第一个是表格/模型“Ad”(一个),它与“AdEvent”(很多)有关。 AdEvents有一个外键“ad_id”。
在控制器中我可以这样使用它并加载相关的AdEvent记录。
$this->Ad->bindModel(array('hasMany' => array(
'AdEvent' => array(
'className' => 'AdEvent',
'foreignKey' => 'ad_id',
))));
现在我只需要没有数据的计数,我尝试使用param“fields”和“group”COUNT() - 语句,但在这种情况下结果为空。我也将关系改为“hasOne”,但没有效果。
任何想法如何使用Cake-magic来做到这一点?
编辑: 使用简单的SQL,它看起来像这样(我简单地说,a.id而不是。*):
SELECT a.id, COUNT(e.id) AS count_events
FROM cake.admanager_ads AS a
JOIN ad_events AS e ON e.ad_id = a.id
GROUP BY a.id
LIMIT 50;
答案 0 :(得分:1)
您可以随时进行手动计数。这是我几乎总是最终做的事情,因为我几乎总是已经为其他目的加载了数据。
$Ads = $this->Ad->find('all')
foreach ($Ads as $Ad) {
$NumAdEvents = array(
$Ad['Ad']['id'] => sizeof($Ad['AdEvents']),
)
}
debug($NumAdEvents);
die;
或者你可以使用find('count'):
$id_of_ad = 1; //insert your ad id here, or you can search by some other field
$NumAdEventsAtOneAd = $this->AdEvent->find('count', array('conditions' => array(
'AdEvent.ad_id' => $id_of_ad,
)));
debug($NumAdEventsAtOneAd);
die;