2015-09-04 81 views
3

在这里我有一个事件字段,其中有密码的实际情况。我需要通过download_count DESC命令所有密码。所以我尝试了下面的代码。它不会给我任何错误,但desc不起作用。Cakephp 3:如何在queryBuilder中添加关联数据的顺序?

$event = $this->Events->get($id, [ 
        'contain' => [ 
         'EventPasswordAll.Passwords' => [ 
          'queryBuilder' => function (Query $q) { 
           return $q->order(['download_count' => 'DESC']); 
          } 
         ] 
        ] 
      ]); 

我也曾尝试

return $q->order(['Passwords.download_count' => 'DESC']); 

我得到查询

SELECT EventPasswordAll.id AS `EventPasswordAll__id`, EventPasswordAll.event_id AS `EventPasswordAll__event_id`, EventPasswordAll.password_id AS `EventPasswordAll__password_id`, Passwords.id AS `Passwords__id`, Passwords.name AS `Passwords__name`, Passwords.collection_id AS `Passwords__collection_id`, Passwords.photo_count AS `Passwords__photo_count`, Passwords.download_count AS `Passwords__download_count`, Passwords.created AS `Passwords__created`, Passwords.expires_at AS `Passwords__expires_at`, Passwords.recommended AS `Passwords__recommended`, Passwords.accepted AS `Passwords__accepted`, Passwords.user_id AS `Passwords__user_id` FROM event_password_all EventPasswordAll INNER JOIN passwords Passwords ON Passwords.id = (EventPasswordAll.password_id) WHERE EventPasswordAll.event_id in (14) 

如何QueryBuilder的添加顺序关联数据?

+0

什么是生成的查询是什么样子? – ndm

+0

我编辑了我的问题@ndm。 –

+0

看起来'Passwords'与'EventPasswordAll'关联为'EventPasswordAll belongsTo Passwords'? – ndm

回答

1

通过EventPasswordAll belongsTo Passwords的关联,passwords表记录将通过连接检索,如查询中所示。在这种情况下,不存在针对Passwords的查询,因此查询构建器未被调用。

必须设置为EventPasswordAll查询生成器,而不是订单,像

$event = $this->Events->get($id, [ 
    'contain' => [ 
     'EventPasswordAll' => [ 
      'queryBuilder' => function (Query $q) { 
       return $q->order(['Passwords.download_count' => 'DESC']); 
      }, 
      'Passwords' 
     ] 
    ] 
]); 
+0

你真是老大,非常感谢! –