[英]CakePHP 2.0 naming MySQL aggregate functions in query
我在本機SQL中運行的項目中有一個復雜的查詢。
$r = $this->User->Project->query("
SELECT
Project.id,
Project.name,
Customer.name,
(SELECT SUM(hours)
FROM entries
WHERE project_id = Project.id
AND createdby = $id
AND deleted = 0
AND YEAR(entry_date) = YEAR(NOW())
AND DAYOFYEAR(entry_date) = DAYOFYEAR(NOW())) as TodayHours,
(SELECT SUM(hours)
FROM entries
WHERE project_id = Project.id
AND createdby = $id
AND deleted = 0
AND YEAR(entry_date) = YEAR(NOW())
AND WEEKOFYEAR(entry_date) = WEEKOFYEAR(NOW())) as WeekHours,
(SELECT SUM(hours)
FROM entries
WHERE project_id = Project.id
AND deleted = 0) as SpentHours,
Project.budget_hours as TotalHours
FROM projects as Project
INNER JOIN users_projects UserProject on UserProject.project_id = Project.id
AND UserProject.user_id = $id
INNER JOIN customers Customer on Customer.id = Project.customer_id
WHERE Project.deleted = 0
AND Project.archived = 0
");
當結果卷土重來時,幾乎所有東西都看起來很完美。 唯一的問題是CakePHP將我的SUM
列扔到它們自己的分組[0]
。 如果可能的話,我想讓他們加入Project
。 我有什么辦法可以別名這些字段,以便將來發生?
Array
(
[0] => Array
(
[Project] => Array
(
[id] => 7
[name] => Some Project Name
[TotalHours] => 67.00
)
[Customer] => Array
(
[name] => Some Customer Name
)
[0] => Array
(
[TodayHours] => 2.25
[WeekHours] => 27.25
[SpentHours] => 27.25
)
)
)
抱歉這么快回答...希望對其他有相同問題的人有所幫助。 這是解決方案。 基本上,您必須為模型設置空的虛擬字段,然后使用MyModel__VirtualFieldName作為列的別名。 之后就完美了!
附帶說明一下 ,Twitter上的@jose_zap是CakePHP核心開發人員,非常有幫助。 再次感謝!
//Add the virtual fields for this specific case
$this->User->Project->virtualFields += array(
'TodayHours' => 0,
'WeekHours' => 0,
'SpentHours' => 0
);
//Run the query
$projects = $this->User->Project->query("
SELECT
Project.id,
Project.name,
Customer.name,
(SELECT SUM(hours)
FROM entries
WHERE project_id = Project.id
AND createdby = $id
AND deleted = 0
AND YEAR(entry_date) = YEAR(NOW())
AND DAYOFYEAR(entry_date) = DAYOFYEAR(NOW())) as Project__TodayHours,
(SELECT SUM(hours)
FROM entries
WHERE project_id = Project.id
AND createdby = $id
AND deleted = 0
AND YEAR(entry_date) = YEAR(NOW())
AND WEEKOFYEAR(entry_date) = WEEKOFYEAR(NOW())) as Project__WeekHours,
(SELECT SUM(hours)
FROM entries
WHERE project_id = Project.id
AND deleted = 0) as Project__SpentHours,
Project.budget_hours as TotalHours
FROM projects as Project
INNER JOIN users_projects UserProject on UserProject.project_id = Project.id
AND UserProject.user_id = $id
INNER JOIN customers Customer on Customer.id = Project.customer_id
WHERE Project.deleted = 0
AND Project.archived = 0
");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.