当我在CakePHP中检索大量数据时,如何获得模型“hasMany”关系的每个实例的计数?
NB:我的标题很难用词来表达——如果你能想出一种更简洁的表达方式,我将不胜感激 我正在使用CakePHP,我正在制作一个基本的论坛系统。我的模型如下所示: ForumSection有许多ForumCategories ForumCategory有许多ForumPost,有一个ForumSection ForumPost有许多ForumPost,只有一个ForumCategory NB:ForumPost可以是线程或回复 在论坛的索引页上,我想显示每个论坛类别的帖子和回复数量。我可以通过在ForumSection模型中实现可包含的关系,然后使用以下语句来实现这一点:当我在CakePHP中检索大量数据时,如何获得模型“hasMany”关系的每个实例的计数?,php,cakephp,model-view-controller,cakephp-2.0,Php,Cakephp,Model View Controller,Cakephp 2.0,NB:我的标题很难用词来表达——如果你能想出一种更简洁的表达方式,我将不胜感激 我正在使用CakePHP,我正在制作一个基本的论坛系统。我的模型如下所示: ForumSection有许多ForumCategories ForumCategory有许多ForumPost,有一个ForumSection ForumPost有许多ForumPost,只有一个ForumCategory NB:ForumPost可以是线程或回复 在论坛的索引页上,我想显示每个论坛类别的帖子和回复数量。我可以通过在Foru
$sections = $this->ForumSection->find('all', array(
'contain' => array(
'ForumCategory' => array(
'ForumPost' => array(
'conditions' => array('ForumPost.is_thread', '1')
)
)
)
));
然后,在我看来,我可以简单地重复ForumPosts的计数
当然,这是次优的-我可能会带回成千上万行数据并将其加载到内存中,而实际上我可以从ForumPosts执行SELECT COUNT*行的直接SQL,其中forum_category_id=x,is_thread=1表示计数,并避免这种情况。我甚至可以使用一个Cake函数来完成这项工作,但重点是,它比将整个表加载到内存中仅仅计算它们更有效
不过,这可能需要在我的控制器或模型中进行循环,但我仍然需要循环控制器中的部分并处理返回的数据,以便将计数插入其中
在我看来,我有两个选择:
在视图中,我可以在遍历类别时获得帖子数量,例如。
foreach$类别作为$类别:
//记数
回声柱计数
我不愿意这样做,因为据我所知,这在MVC项目上似乎是不明智的,而且我确信会有一种我没有考虑过的更为优化的方法
截取找到的数据并插入计数,然后将数据修补到视图中。这似乎是MVC最真实的方式,但感觉还是不对的。
最终,我的问题是,Cake是否提供了包括模型内部关系计数而不包括所述关系的整个数据集的方法?如果没有,是否有一种方法比我建议的两种方法更直接/更有效地遵循惯例?问题写得很好,这真的很适合改变。然而,这已经讨论过很多次了,答案是计数器缓存。我已经睡到一半了,太累了,无法搜索正确的副本,所以这里只是一个文档链接:我在试图找到答案时看到了上面提到的内容,但希望找到一种进行运行时计算的方法-回顾一下,我真的没有什么好的理由想在运行时使用它,除了有时不合理地讨厌存储可派生的数据,所以我想我会实现它。如果你把它作为一个答案,我会接受它-谢谢!我为复制品道歉;我不确定要遵循的程序-是否关闭/删除问题?