2013-09-23 109 views
1

我對如何在CakePHP上編寫查詢有疑問。 而不是使用CakePHP中的querybuilder我想使用語句查詢。 所以我我的查詢是:CakePHP語句查詢

SELECT `Post`.id, `Post`.title, COUNT(`Like`.id) AS `Posts_Liked` 
FROM posts AS `Post`, likes AS `Like` 
WHERE `Post`.id = `Like`.posts_id; 

但是,當我將結果發送到瀏覽網頁,我不能打電話$post['post']['Posts_Liked']時,你得到計數,所以我應該怎麼稱呼視圖中的這些數據?

+1

使用'debug($ result);死亡;'在控制器中,看看它是否是你期望的 – mmahgoub

回答

2

聚合的結果將不會被添加到數據陣列每doc

您應該使用virtual fields或得到這樣的數據:使用

$post[0]['Posts_Liked'] 

,可以檢查數據

debug($post); 

看看你的數組是如何構造的。

使用虛擬域,你可以做到這一點是這樣的:

$this->Post->virtualfields['Posts_liked'] = 0; 
$this->Post->query('SELECT `Post`.id, `Post`.title, COUNT(`Like`.id) AS `Posts_liked` FROM posts AS `Post`, likes AS `Like` WHERE `Post`.id = `Like`.posts_id;'); 

,然後讓您的數據按通常

$post['Post']['Posts_liked'] 

如果你想永久保存,你應該給一個嘗試到counterCache

-1

在進行模型調用之後立即嘗試做一個pr($post); die();,然後它甚至進入視圖。我認爲它可能被$post[0]['Posts_Liked']引用,因爲它是一個聚合函數。您會注意到CakePHP將SUM(),MAX(),COUNT()等放在$result[0]['count'];種表示法中。希望這可以幫助。

CakePHP的pr()函數比print_r,imho要好得多。