Yii2 with 和 joinWith 的區別


轉載

先確保 Topic 有 getComments() 方法

class Topic extends \yii\db\ActiveRecord
{
    ...
    public function getComments()
    {
        return $this->hasMany(Comment::className(), ['topic_id' => 'id']);
    }
}

  

joinWith()

Topic::find()->joinWith('comments');

// 輸出的 SQL
SELECT `topic`.* FROM `topic` LEFT JOIN `comment` ON `topic`.`id` = `comment`.`topic_id`

  

with()

Topic::find()->with('comments');

// 輸出的 SQL
SELECT * FROM `topic`
SELECT * FROM `comment` WHERE `topic_id` IN (1, 2, 3, 4, 5)

  

而針對於這兩者,官網上是這樣說的:

yii\db\ActiveQuery::joinWith() 和 yii\db\ActiveQuery::with() 的區別是 前者連接主模型類和關聯模型類的數據表來檢索主模型, 而后者只查詢和檢索主模型類。 檢索主模型

由於這個區別,你可以應用只針對一條 JOIN SQL 語句起效的查詢條件。 如,通過關聯模型的查詢條件過濾主模型,如前例, 可以使用關聯表的列來挑選主模型數據,

用我自己的語言,總結如下:

注意: 我把關聯表,叫做 "副表",

  1. 當你使用關聯查詢的時候, 你想排除掉副表不滿足的條件下, 主表也給排除掉, 那么我們這時候就選 JoinWith
  2. 當你不介意對應的副表是否滿足條件時, 只需要把主表顯示出來就行了, 那么我們這時就選with
  3. 你觀察sql,你會發現, 用with的時候, 沒有with對應的sql語句, 而JoinWith對應的sql語句是存在的, 這點可以注意一下


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM