CakePHP:使用bindModel加载相关模型的计数

时间:2011-12-07 10:33:07

标签: php sql cakephp model

我在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;

1 个答案:

答案 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;