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

1 réponse


Ch0c4
Auteur
Réponse acceptée

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);