大家好,节日快乐。
最近我的任务是将一个 beta 应用程序从纯 PHP/jQuery 转换为 CakePHP/ExtJS(我是新手)。
我的问题是填充主网格的最复杂的查询。
为简单起见,有 3 个表具有正确的烘焙关系和模型:Projects
、、、ToDo
ExtraToDo
Projects
有很多 ToDo
和ExtraToDo
.
ToDo
并ExtraToDo
有列Title
和Complete
。
我的目标是根据这三个表来获得每个项目的完成百分比。
我解决这个问题的方法是列的SUM除以列Complete
的COUNTComplete
。我正在尝试使用 CakePHP 的可读性/性能/otherstuffIdontknowyet 方式。
最初,在原始 SQL 中,我是这样做的:
SELECT
`idProject`,
(SELECT
ROUND((SUM(`Complete`) / COUNT(`Complete`)) * 100),
FROM
(SELECT `Complete`, `ProjectID` FROM `ToDo`
UNION ALL
SELECT `Complete`, `ProjectID` FROM `ExtraToDo`) orders
WHERE
`ProjectID` = `idProject`
) AS 'Completion'
FROM
`Projects`
我也很容易让它在 Kohana PHP MVC 框架中工作,我在决定使用 CakePHP 之前尝试过。我很喜欢他们的查询是如何创建的......:
private function get_completion() {
$Query = DB::select('ProjectID', array(DB::expr('ROUND((SUM(`Complete`) / COUNT(`Complete`)) * 100)'), 'Completion'))
->from(array('ToDo', 'ExtraToDo'))
->group_by('ProjectID');
return $Query;
}
public function get_all() {
$Query = DB::select()
->from('Projects')
->join(array(self::get_completion(), 'Completion'))
->on('projects.id', '=', 'Completion.ProjectID')
->execute()
->as_array();
return $Query;
}
不幸的是,在使用 CakePHP 的方式时,我一直在努力让它在 CakePHP 中工作。
我很确定 virtualFields 是我回答的关键,但在阅读了文档并尝试了 x、y 和 z 之后。我一直无法理解它们以及它们之间的关系。
提前谢谢你-T6