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();
我想执行这个查询:
$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();