Bonjour, je cherche a faire une pagination sur une requête qui a besoin de 2 model pour fonctionner, j'arrive à avoir le résultat attendu sans la pagination mais je n'arrive pas à la retranscrire pour la pagination
voici la requête sql que je veux effectuer
SELECT * , AVG( notes.note ) AS moyenne
FROM notes, articles
WHERE notes.article_id = articles.id
GROUP BY articles.id
ORDER BY moyenne DESC
le code php sans la pagination (j'ai besoin de toutes les valeurs de article
$article = $this->Article->Note->find('all', array(
'fields' => array('Article.*', 'AVG(Note.note)'),
'order' => array('AVG(Note.note)'),
'group' => array('Article.id')
)
);
Si sa peut aider voici les relations
Model/Article.php
public $hasMany = array(
'Note' => array(
'className' => 'Note',
'foreignKey' => 'article_id',
'dependent' => false,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'exclusive' => '',
'finderQuery' => '',
'counterQuery' => ''
)
);
Model/Note.php
public $belongsTo = array(
'Article' => array(
'className' => 'Article',
'foreignKey' => 'article_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
j'ai essayé sa mais apparemment il ne prend pas en compte le model Note ni les paramètre que je lui est donnée
$this->paginate = array(
'Article' => array(
'fields' => array('*'),
'group' => array('Article.id'),
'conditions' => array('Article.id = Note.article_id')
),
'Note' => array(
'fields' => array('AVG(Note.note)'),
'order' => array('AVG(Note.note)')
)
);
$articles = $this->paginate();
$this->set('articles', $articles);
voila l'erreur
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Note.article_id' in 'where clause'
SQL Query: SELECT *, `Article`.`id` FROM `apiGod`.`articles` AS `Article` WHERE `Article`.`id` = `Note`.`article_id` GROUP BY `Article`.`id` LIMIT 20
Ce qui ne correspond pas du tout à la requête recherché.
Je veux éviter de faire un query si c'est possible.
Merci pour vos réponse
Bon j'ai cherché un moyen de changer ma requête avec succès
$this->paginate = array(
'fields' => array('AVG(note) as moyenne', 'Article.*'),
'group' => array('article_id'),
);
$articles = $this->paginate('Note');
$this->set('articles', $articles);