[英]Yii2 via table is not using JOIN?
我在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列对用户进行排序。
在您的模型中
public function getSubscribers()
{
return $this->hasMany(User::className(), ['id' => 'user_id']);
}
在控制器中用于检索数据
$res = User::find()->joinWith('subscribes')->orderBy('subscribes.created_on');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.