我在actionView($id)
中运行以下查询:
$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和#3)之外,每个表(#1和#2)需要6-7毫秒。 #5)。所有查询都链接到我的配置文件控制器中的同一行(41)。
为什么要为这个简单的查询运行四个查询,这样查询的正确方法是什么?
答案 0 :(得分:1)
1 和 2 查询用于加载User
和Profile
模型的属性列表。
3 - 使用给定ID加载主User
模型。
4 - 急切加载所有Profile
相关模型。
所以没有不必要的查询,ActiveQuery
这是正确的方法。