我在mysql中有几张表:
用户:
|id|name|
|1 |test|
|2 |test|
|3 |test|
|4 |test|
预订:
|user_id|ref_user_id|created_on|
|2 |1 |1000000002|
|3 |1 |1000000001|
|4 |1 |1000000003|
我有用户 ActiveRecord模型:
class User extends ActiveRecord {
/**
* @return \yii\db\ActiveQuery
*/
public function getSubscribers()
{
return $this->hasMany(User::className(), ['id' => 'user_id'])->viaTable('subscribes', ['ref_user_id' => 'id'], function ($query) {
$query->orderBy(['created_on' => SORT_DESC]);
});
}
}
然后,当我试图获得订阅者时,他们没有按订阅时间排序,他们按用户ID排序,因为viaTable不使用JOIN但使用WHERE IN条件。
$user = User::findOne(1);
$user->getSubscribers()->createCommand()->getRawSql();
此代码返回下一个sql代码:
SELECT * FROM `user` WHERE `id` IN ('3', '2', '4');
请帮助我按订阅者表的 created_on 列对订阅者进行排序。
答案 0 :(得分:0)
在你的模特中
public function getSubscribers()
{
return $this->hasMany(User::className(), ['id' => 'user_id']);
}
在控制器中检索数据
$res = User::find()->joinWith('subscribes')->orderBy('subscribes.created_on');