具有一个结果的关系查询 - 显示完整列

时间:2015-04-05 18:51:06

标签: yii2

我在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)。

为什么要为这个简单的查询运行四个查询,这样查询的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

1 2 查询用于加载UserProfile模型的属性列表。

3 - 使用给定ID加载主User模型。

4 - 急切加载所有Profile相关模型。

所以没有不必要的查询,ActiveQuery这是正确的方法。