Yii2:如何按相关字段对 activeRecord 关系查询进行排序?

Yii2: how to order activeRecord relation query by related field?

我想执行这个查询:

$topics = ForumTopic::find()
            ->with([                
                'lastPost' => function($query) {
                    $query->select(['id', 'ctime']);
                },
            ])
            ->orderBy('lastPost.ctime DESC')
            ->all();

论坛主题中声明的关系如下:

public function getLastPost()
{
    return $this->hasOne(ForumPost::className(), ['id' => 'lastPostId']);
}

但是我的查询失败了(因为 yii2 将所有查询分开并且不连接表)。 有什么方法可以通过 yii2 activeRecord 实现我的目的吗?

试试这个:

$topics = ForumTopic::find()
        ->with([                
            'lastPost' => function($query) {
                $query->select(['id', 'ctime']);
            },
        ])
        ->orderBy([ForumPost::tableName() . '.ctime' => SORT_DESC])
        ->all();

所以,澄清一下,正确答案是:

$topics = ForumTopic::find()
            ->alias('t')
            ->select(['t.*','l.ctime lastPostCtime'])
            ->joinWith([
                'lastPost l' => function($query) {
                    $query->select(['l.id', 'l.ctime', 'l.userId', 'l.guestName']);
                },
            ])
            ->orderBy('lastPostCtime DESC')
            ->all();