2011-12-07 39 views
0

我有1:n關係中的兩個模型,我只想加載相關項目的計數。CakePHP:使用bindModel的相關模型的加載計數

第一個是與「AdEvent」(許多)有關的表/模型「廣告」(一個)。 AdEvents有一個外鍵「ad_id」。

在控制器中,我可以用它來加載相關的AdEvent記錄。

$this->Ad->bindModel(array('hasMany' => array(
    'AdEvent' => array(
     'className' => 'AdEvent', 
     'foreignKey' => 'ad_id', 
    )))); 

現在我只需要計數沒有數據,我試圖與參數「域」和「組」一COUNT() - 聲明,但在這種情況下,結果是空的。我也將關係改爲「hasOne」,但沒有效果。

任何想法如何使用Cake-magic來做到這一點?

編輯: 通過簡單的SQL它看起來像這樣(我simplyfied它,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

你總是可以做當然是手動計數。這是我幾乎總是最終做的,因爲我幾乎總是將數據加載到其他用途。

$Ads = $this->Ad->find('all') 
foreach ($Ads as $Ad) { 
    $NumAdEvents = array(
     $Ad['Ad']['id'] => sizeof($Ad['AdEvents']), 
    ) 
} 
debug($NumAdEvents); 
die; 

或者你可以使用一個查找( '計數'):

$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; 
+0

這一發現( '計數')是什麼OP是尋找。一些東西不是一種關聯,它只是一個來自原始模型的數字。 – Oldskool

+0

我知道,但那就是我試圖避免的,因爲需要加載大量不必要的數據。 – Daniel

+0

@oldskool:我需要「廣告」的所有數據加上相關的「AdEvents」的數量。我可以使用一個簡單的SQL查詢,但要求是用cakemagic做... ...( – Daniel