【发布时间】:2015-03-09 17:29:48
【问题描述】:
我有一个 CakePHP 模型的层次结构,如下所示:
Users > Feedfolders > Feeds > Entries
在 FeedsController 中,我试图根据按 Feed ID 分组的用户 ID 获取所有未读条目的计数。我真的不知道我应该如何以适合 Cake 做事方式的方式来做这件事。我觉得 Cake 基于模型中的 $belongsTo 和 $hasMany 属性对模型的理解应该让它适当地解决连接,但我不确定我做错了什么。我尝试了几个find() 变体,但都没有成功。最近我尝试过:
$result = $this->Feed->find('all', array(
'conditions' => array('User.id' => $this->Auth->user('id'), 'Entry.read' => 1),
'fields' => array('count(Entry.feed_id) as Count', 'Entry.feed_id'),
'group' => 'Entry.feed_id',
'recursive' => 2)
);
生成以下 SQL:
SELECT count(`Entry`.`feed_id`) as Count, `Entry`.`feed_id`, `Feed`.`id`
FROM `feeds` AS `Feed`
LEFT JOIN `feedfolders` AS `Feedfolder` ON (`Feed`.`feedfolder_id` = `Feedfolder`.`id`)
WHERE `User`.`id` = 5
AND `Entry`.`read` = 1
GROUP BY `Entry`.`feed_id`
这会导致以下错误:
SQL Error: 1054: Unknown column 'Entry.feed_id' in 'field list' [CORE/cake/libs/model/datasources/dbo_source.php, line 684]
我看到了 SQL 的问题,可以手写一个查询来做我想做的事,但这似乎是在 CakePHP 中应该可以做的事情,而无需求助于手工制作的 SQL。
我应该如何设置我的find() 调用来做我想做的事,从 MVC 的角度来看,我通过 FeedsController 查找未读条目的计划是否有意义?
【问题讨论】:
标签: sql cakephp join model find