我得到了深刻的联想,我想知道是否可以通过BTM协会中包含的字段订购结果:
$modeles = $this->Caracteristiques
->find()
->contain(['ModeleElements.ModeleOuvrages' => function ($q) {
return $q
->where([
'ModeleOuvrages.couche_id' => 2,
'ModeleOuvrages.compte_client_id' => $this->Auth->user('compte_client_id')
]);
}]);
这是我的查询,我希望通过“ModeleOuvrages”关联中的字段“nom”获得resultSet顺序。
是否可以通过“ModeleOuvrages.nom”获得所有“caracteristiques”订单?
编辑:我这样做了:
$modeleOuvrages = $this->ModeleOuvrages
->find()
->where([
'couche_id' => 2,
'compte_client_id' => $this->Auth->user('compte_client_id')
])
->select([
'ModeleOuvrages.nom',
'ModeleElements.nom',
'Caracteristiques.nom',
'Caracteristiques.type'
])
->matching('ModeleElements.Caracteristiques')
->order(['ModeleOuvrages.nom', 'ModeleElements.nom', 'Caracteristiques.nom']);
它运作良好。我们也可以用更详细的包含来做到这一点。
答案 0 :(得分:2)
是的,使用matching('Deep.Nested.Table')
时,您可以对该表的任何列进行排序。
请记住,匹配会创建INNER JOIN
,并且可能会在结果中复制行。您可以使用$query->distinct(['MainTable.id'])
删除重复项。