У меня есть иерархия моделей CakePHP, которая выглядит следующим образом:
Users > Feedfolders > Feeds > Entries
Изнутри FeedsController я пытаюсь получить количество всех непрочитанных записей на основе идентификатора пользователясгруппированы по идентификатору канала.Я действительно в растерянности относительно того, как я должен делать это таким образом, чтобы это соответствовало способу действий Кейка.Мне кажется, что понимание 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()
звоните, чтобы делать то, что я хочу, и имеет ли смысл мой план по поиску непрочитанных записей через FeedsController с точки зрения MVC?