最新消息: 新版网站上线了!!!

Yii2 数据模型之关联查询性能问题

Yii2 的查询结果是被缓存

public function actionIndex()
{
    // 关联查询结果默认被缓存 默认下次查询不会去查数据库
    $user = User::find()->where(['name'=>'zhangsan'])->one();
    $orders = $user->orders; // select * from order where user_id = user.id;

    // 手动清楚缓存
    unset($user->orders);
    // 重新查询
    $orders2 = $user->orders; // select * from order where user_id = user.id;
}

关联查询的多次查询

public function actionIndex()
{
    // 关联查询的多次查询
    // 方法一:一般方式(如果有100个用户 会执行101次查询)
    $users = User::find()->all(); // select * from user
    foreach($users as $user){
        $oders = $user->orders; // select * from order where user_id = user.id;
    }

    // 方法二、 Yii2 提供的高效能方式(只会执行2次数据库查询)
    $users = User::find()->with('orders')->all();
    // select * from user
    // select * from order where user_id in(...);
    foreach($users as $user){
        $oders = $user->orders; // 此处不会执行数据库查询
    }
}

转载请注明:谷谷点程序 » Yii2 数据模型之关联查询性能问题