1

我对如何在 CakePHP 上编写查询有疑问。我不想使用 CakePHP 的查询构建器,而是使用语句查询。所以我的查询是:

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'],那么我应该如何在视图中调用这些数据呢?

4

2 回答 2

2

聚合结果不会按照文档添加到数据数组中

您应该使用虚拟字段或获取如下数据:

$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

于 2013-09-23T17:27:56.737 回答
-1

pr($post); die();在进行模型调用之后,甚至在它到达视图之前尝试做一个正确的事情。我认为它可能被 引用$post[0]['Posts_Liked'],因为它是一个聚合函数。您会注意到 CakePHP 将SUM(), MAX(),COUNT()等放在了$result[0]['count'];一种符号中。希望这可以帮助。

CakePHP 的pr()功能比恕我直言要好得多print_r

于 2013-09-23T17:29:53.223 回答