按belongsToMany协会

时间:2015-06-23 10:07:30

标签: cakephp-3.0

我得到了深刻的联想,我想知道是否可以通过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']);

它运作良好。我们也可以用更详细的包含来做到这一点。

1 个答案:

答案 0 :(得分:2)

是的,使用matching('Deep.Nested.Table')时,您可以对该表的任何列进行排序。

请记住,匹配会创建INNER JOIN,并且可能会在结果中复制行。您可以使用$query->distinct(['MainTable.id'])删除重复项。