我正在爲使用CakePHP 1.2的系統編寫一個插件模塊,而我是框架新手。如何查詢Cake的方式?INNER JOIN與GROUP BY CakePHP方式
SELECT a.id, a.name, COUNT(a.id) AS comments
FROM articles a LEFT JOIN comments c ON a.id = c.item_id
GROUP BY a.id
ORDER BY comments DESC;
我不能編輯或條評論車型,但我在我的插件模型試圖這樣做,它不會產生相同的結果:
$this->loadModel('Article');
$options['fields'] = array('Article.id', 'Article.name',
'COUNT(Article.id) AS comments');
$options['joins'] = array(
array('table' => 'comments',
'alias' => 'c',
'type' => 'INNER',
'conditions' => array(
'Article.id = c.item_id')
));
$options['group'] = array('Article.id');
$options['order'] = 'comments DESC';
$options['limit'] = 5;
$rows = $this->Article->find('all', $options);
另外,我不敢肯定,但我認爲Article類可能已經有:
public $actsAs = array('Containable');
public $hasMany = array('Comment');
在你的普通sql中你有一個'LEFT JOIN',在你定義'type => INNER'的Cake中。這是故意的嗎? – biziclop 2012-03-19 19:26:23
我相信INNER更正確,你只用OUTER連接時使用左和右,但根據我的經驗,MySQL對待JOIN,LEFT JOIN和INNER JOIN全部完全相同 – 2012-03-20 17:42:20
否,'INNER'和'LEFT'('LEFT OUTER')連接被區別對待。不過,如果你在連接表上添加更多的條件到WHERE子句,mysql會把一個'LEFT JOIN'作爲'INNER JOIN'。 – bfavaretto 2012-03-20 18:17:06