0
我一直在試圖弄清楚如何將一些計算字段添加到CakePHP中的模型中。我可以用下面的查詢,以達到預期的效果:CakePHP:將計算字段從另一個模型添加到模型中
SELECT project_id,
COUNT(*) AS clicks_total,
SUM(CASE WHEN clicks.redirect_url = projects.url THEN 1 ELSE 0 END) AS clicks_redirected,
SUM(CASE WHEN clicks.redirect_url = projects.url THEN 0 ELSE 1 END) AS clicks_not_redirected
FROM clicks
LEFT JOIN projects ON clicks.project_id = projects.id
GROUP BY project_id
如果我嘗試執行它作爲一個自定義查詢蛋糕轉換結果以這樣的方式,這將需要大量的數組操作是可用的。我試着做它用下面的代碼蛋糕的方式,但由於某些原因,計算字段在一個單獨的陣列從而導致在視圖奇怪的行爲結束了:
$this->paginate = array(
'Project' => array(
'fields' => array(
'id', 'name', 'url', 'url_mac', 'url_mobile',
'COUNT(*) AS clicks_total',
'SUM(CASE WHEN Click.redirect_url = Project.url THEN 1 ELSE 0 END) AS clicks_redirected',
'SUM(CASE WHEN Click.redirect_url = Project.url THEN 0 ELSE 1 END) AS clicks_not_redirected'
),
'joins' => array(
array(
'table' => 'clicks',
'alias' => 'Click',
'type' => 'LEFT',
'conditions' => array('Click.project_id = Project.id')
)
),
'group' => 'project_id'
));
$this->set('projects', $this->paginate());
產生以下結果:
array(
(int) 0 => array(
'Project' => array(
'id' => '508705c8-126c-48f9-bd9a-6d79d13bb9ea',
'name' => 'Test Project',
'url' => 'http://www.test.com',
'url_mac' => 'http://www.mac.com',
'url_mobile' => 'http://www.mobile.com'
),
(int) 0 => array(
'clicks_total' => '80',
'clicks_redirected' => '35',
'clicks_not_redirected' => '45'
)
),
(int) 1 => array(
'Project' => array(
'id' => '508b1073-2aa8-4895-b8d9-152ed13bb9ea',
'name' => 'Another Project',
'url' => 'http://another.com',
'url_mac' => 'http://anothermac.com',
'url_mobile' => 'http://anothermobile.com'
),
(int) 0 => array(
'clicks_total' => '134',
'clicks_redirected' => '70',
'clicks_not_redirected' => '64'
)
)
)
有沒有人有任何想法獲得計算點擊計數顯示在項目數組下?
太棒了,工作! – Ted
'公共$ virtualFields =陣列( \t \t 'clicks_total'=> 'COUNT(*)', \t \t 'clicks_redirected'=> 'SUM(CASE WHEN Click.redirect_url = Project.url THEN ELSE 1 0 END)' , \t \t 'clicks_not_redirected'=> 'SUM(CASE WHEN Click.redirect_url = Project.url THEN ELSE 0 1 END)' \t);' – Ted
是否有可能定義虛擬字段僅對於特定的方法?當我添加虛擬領域的模型,打破了所有其他方法。 – Ted