我对如何在CakePHP上编写查询有疑问。 而不是使用CakePHP中的querybuilder我想使用语句查询。 所以我的疑问是:
SELECT `Post`.id, `Post`.title, COUNT(`Like`.id) AS `Posts_Liked`
FROM posts AS `Post`, likes AS `Like`
WHERE `Post`.id = `Like`.posts_id;
但是当我将结果发送到View页面时,我在调用$post['post']['Posts_Liked']
时无法获得计数,那么我该如何在视图中调用这些数据呢?
答案 0 :(得分:2)
根据doc
,聚合结果不会添加到数据数组中您应该使用virtual fields或获取如下数据:
$post[0]['Posts_Liked']
您可以使用
检查数据debug($post);
查看数组的结构。
使用虚拟字段可以实现以下目的:
$this->Post->virtualfields['Posts_liked'] = 0;
$this->Post->query('SELECT `Post`.id, `Post`.title, COUNT(`Like`.id) AS `Posts_liked` FROM posts AS `Post`, likes AS `Like` WHERE `Post`.id = `Like`.posts_id;');
然后按照惯例获取数据
$post['Post']['Posts_liked']
如果您想永久保留,请尝试counterCache
答案 1 :(得分:-1)
在进行模型调用之后,尝试执行pr($post); die();
,然后再进入视图。我认为它可能被$post[0]['Posts_Liked']
引用,因为它是一个聚合函数。您会注意到CakePHP以SUM()
符号表示MAX()
,COUNT()
,$result[0]['count'];
等。希望这会有所帮助。
CakePHP的pr()
功能比print_r
,imho好得多。