Yii2 via table没有使用JOIN?

时间:2017-03-23 17:55:39

标签: php yii2

我在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 列对订阅者进行排序。

1 个答案:

答案 0 :(得分:0)

在你的模特中

public function getSubscribers()
{
    return $this->hasMany(User::className(), ['id' => 'user_id']);
}

在控制器中检索数据

$res = User::find()->joinWith('subscribes')->orderBy('subscribes.created_on');