J'ai une hiérarchie de modèles CakePHP qui ressemble à:Rejoindre la table parent dans CakePHP Model-> find()
Users > Feedfolders > Feeds > Entries
À partir de l'FeedsController, je suis en train d'obtenir un compte de tous Entrées non lues basées sur l'ID utilisateur regroupées par ID de flux. Je ne sais vraiment pas comment je devrais le faire d'une manière qui correspond à la façon de faire de Cake. Je me sens comme la compréhension de Cake des modèles basés sur les propriétés $belongsTo
et $hasMany
dans les modèles devrait le laisser résoudre les jointures de manière appropriée, mais je ne suis pas sûr de ce que je fais mal. J'ai essayé plusieurs variantes find()
sans succès. Plus récemment, j'ai essayé:
$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)
);
qui génère l'instruction SQL suivante:
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`
qui se traduit par l'erreur suivante:
SQL Error: 1054: Unknown column 'Entry.feed_id' in 'field list' [CORE/cake/libs/model/datasources/dbo_source.php, line 684]
Je vois le problème avec le SQL, et pourrait remettre écrire une requête pour faire ce que je veux, mais cela semble être le genre de chose qui devrait être faisable dans CakePHP sans avoir recours au SQL fait à la main.
Comment dois-je configurer mon appel find()
pour faire ce que je veux, et, mon plan pour trouver des entrées non lues via le FeedsController est-il logique d'un point de vue MVC?
C'est de 90% du chemin pour ce que j'ai besoin, et il est de ma faute pour ce que je déformant en fait voulu. J'ai besoin d'obtenir le nombre d'entrées non lues groupées par l'identifiant du flux. Ce code peut-il être adapté à cela? – theraccoonbear
@theraccoonbear - Voir ma nouvelle réponse. C'est un peu long, mais ça fait l'affaire. J'espère que ça marche pour toi. Moz –