簡體   English   中英

Yii2通過表不使用JOIN嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM