CakePHP语句查询

时间:2013-09-23 17:22:08

标签: php mysql cakephp

我对如何在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']时无法获得计数,那么我该如何在视图中调用这些数据呢?

2 个答案:

答案 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好得多。