2017-03-23 2 views
0

J'ai un tableau des élèves et des résultats. L'étudiant a beaucoup de résultats. Un résultat est associé à un seul étudiant. Donc, s'il vous plaît, ce que j'essaie de réaliser est quelque chose comme ceci:Simple compte et tri sur l'association Cakephp 3

$this->Students 
    ->find('all') 
    ->contain('Results') 
    ->order('by count of results each student has' => 'asc'); 

Toute aide serait grandement appréciée.

+0

Ce que vous avez défini dans le modèle, est-il hasOne relation ou hasMany. Pouvez-vous fournir le modèle des étudiants –

Répondre

1

Essayez cette

$query = $this->Students->find() 
    $query->select(['total_result'=> $query->func()->count('Results.id')]) 
    ->autoFields(true) 
    ->contain('Results') 
    ->leftJoinWith('Results') 
    ->group(['Students.id']) 
    ->order(['total_result'=>'ASC']); 

debug($query->all()); 

Plus check Here

+0

A travaillé comme charme. Merci beaucoup – degee147

+1

Il convient de noter que cela fonctionnera uniquement avec DMBS qui permet d'inclure des champs non agrégés dans la clause 'SELECT' qui n'apparaissent pas dans la clause' GROUP BY'. Pour les autres SGBD, ou ceux qui le supportent mais qui sont configurés pour ne pas le permettre (ex [** MySQL 'ONLY_FULL_GROUP_BY' **] (https://dev.mysql.com/doc/refman/5.7/fr/group-by -handling.html)), d'autres solutions comme par exemple les sous-requêtes de la clause 'JOIN' doivent être utilisées. Peut-être que vous pouvez ajouter une note et un exemple de cela aussi? – ndm