2015-04-05 225 views
1

我運行下面的查詢在我actionView($id)關係查詢 - SHOW FULL COLUMNS

$model = User::find()->where(['id' => $id]->with('profile')->one(); 

與此查詢完全相同的結果嘗試:從

$model = User::find($id)->with('profile')->one(); 

轉儲Yii調試器:

#1 20:39:49.379 6.5 ms SHOW SHOW FULL COLUMNS FROM `user` 
    C:\...\frontend\controllers\ProfileController.php (41) 

#2 20:39:49.393 5.9 ms SHOW SHOW FULL COLUMNS FROM `profile` 
    C:\...\frontend\controllers\ProfileController.php (41) 

#3 20:39:49.375 0.8 ms SELECT SELECT * FROM `user` WHERE `id`='8' 
    C:\...\frontend\controllers\ProfileController.php (41) 

#5 20:39:49.391 0.7 ms SELECT SELECT * FROM `profile` WHERE `user_id`=8 
    C:\...\frontend\controllers\ProfileController.php (41) 

這會返回我想要的所有信息,但它會查詢完整表用戶和配置文件模型,除了我期望的查詢(#3和#5)之外,每個表(#1和#2)需要6-7ms。所有查詢都鏈接到我的配置文件控制器中的同一行(41)。

爲什麼四個查詢運行這個簡單的查詢,以及做這樣的查詢的正確方法是什麼?

回答

1

和查詢是裝載屬性UserProfile型號列表。

- loading main User model with given id。

- 急切地將所有的Profile相關模型加載到該模型中。

所以沒有不必要的查詢,ActiveQuery這是這樣做的正確方法。