お問い合わせと

関連のお問い合わせ

DB :: enableQueryLog()。
        $フィルタ = []; 
        $フィルタ[ ' Course_IDに' ] = $ Course_IDに。
//         [ 'と'] $フィルター[ 'ユーザー'] = []; 
        CourseUser ::アイテム($フィルター); 
        $クエリ = DB :: getQueryLog();
        返す自己::成功($クエリ);

SQLを実行して印刷

{
             " クエリ"" ここで、(` wm_course_user`.`is_delete` =?) `wm_course_user`から集合体としてカウント(*)を選択" " バインディング" :[
                 0 
            ]、
            " 時間"0.28 
        }、
        { 
            " クエリ"" ` wm_course_user`.`user_id`、 `wm_course_user`(?` wm_course_user`.`is_delete` =)から`wm_course_user`.`course_id`、` wm_course_user`.`created_at`、 `wm_course_user`.`id`を選択`wm_course_user`.`id` DESC制限20によって順序がオフセット0 "" バインディング" :[
                 0 
            ]、
            " 時間"0.28 
        }

私は、それに関連付けられたデータへのアクセスを見つけることができませんSQLクエリを実行しません、これは遅延ロードされ。今私は、クエリを見て、それに関連付けられたデータを使用するつもりです

DB :: enableQueryLog()。
        $フィルタ = []; 
        $フィルタ[ ' Course_IDに' ] = $ Course_IDに。

//         [ 'と'] $フィルター[ 'ユーザー'] = []; 
        $アイテム= CourseUser ::アイテム($フィルター);
        foreachの($アイテムとして$値){ 
            のvar_dump($値 - > USER-> 名); 
        } 
        $クエリ = DB :: getQueryLog()。
        返す自己::成功($クエリ);

SQLの印刷実行以下の通りです。

{
             " クエリ"" ここで、(` wm_course_user`.`is_delete` =?) `wm_course_user`から集合体としてカウント(*)を選択" " バインディング" :[
                 0 
            ]、
            " 時間"0.25 
        }、
        { 
            " クエリ"" ` wm_course_user`.`user_id`、 `wm_course_user`(?` wm_course_user`.`is_delete` =)から`wm_course_user`.`course_id`、` wm_course_user`.`created_at`、 `wm_course_user`.`id`を選択`wm_course_user`.`id` DESC制限20によって順序がオフセット0 "`id` =?リミット1 "
            
            
            
            " バインディング" [
                 2 
            ]、
            " 時間"0.37 
        }

各団体は、いわゆるN + 1つの問題でクエリをデータベースクエリが表示されます。

DB :: enableQueryLog()。
        $フィルタ = []; 
        $フィルタ[ ' Course_IDに' ] = $ Course_IDに。

//         [ 'と'] $フィルター[ 'ユーザー'] = []; 
        $アイテム= CourseUser ::アイテム($フィルター);
        foreachの($アイテムとして$値){
             場合($値- > USER_ID == 2 ){ 
                のvar_dump($値 - > USER-> 名); 
            } 
        } 
        $クエリ = DB :: getQueryLog()。
        返す自己::成功($クエリ);

文を実行

{
             " クエリ"" ここで、(` wm_course_user`.`is_delete` =?) `wm_course_user`から集合体としてカウント(*)を選択" " バインディング" :[
                 0 
            ]、
            " 時間"0.28 
        }、
        { 
            " クエリ"" ` wm_course_user`.`user_id`、 `wm_course_user`(?` wm_course_user`.`is_delete` =)から`wm_course_user`.`course_id`、` wm_course_user`.`created_at`、 `wm_course_user`.`id`を選択`wm_course_user`.`id` DESC制限20によって順序がオフセット0 "" バインディング" :[
                 0 
            ]、
            " 時間"0.25 
        }、
        { 
            " クエリ"" wm_user`ここで` wm_user`.`id` =リミット1 'SELECT * FROM?" " バインディング" [
                 2 
            ]、
            " 時間0.47 
        }

どのようにN + 1問題を回避するには?クエリが事前にロードされて使用してください

DB :: enableQueryLog()。
$フィルタ= []; 
$フィルタ[ 'Course_IDに'] = $ Course_IDに。
[ 'と'] $フィルター[ 'ユーザー'] = [];  CourseUser ::アイテム($フィルター);  $クエリ= DB :: getQueryLog();  自己::成功($クエリ)を返します。

次のようにプリントアウト実行するSQL

{ 
            "クエリ": "ここで、(` wm_course_user`.`is_delete` =?) `wm_course_user`から集合体としてカウント(*)を選択" 
            "バインディング" :[ 
                0  ]、 "時間":0.28  }、 {  "クエリ" :「`wm_course_user`.`user_id`、` wm_course_user`(? `wm_course_user`.`is_delete` =)から` wm_course_user`.`course_id`、 `wm_course_user`.`created_at`、` wm_course_user`.`id`を選択wm_course_user`.`id`のDESC制限`によって注文20が0"オフセット"バインディング" [0 ]、 "時間":0.31 }、{ "クエリ":「` wm_user`場合`wm_user`.`id SELECT * FROM `(2、1643)」、 "バインディング" :[]、 "時間":0.43 }

3回のクエリの合計。

プロパティ関連するデータに関連付けられた雄弁な方法にアクセスすると、「遅延読み込みを。」関連するデータは唯一の本当の負荷になるまで、このプロパティへの最初の訪問です。しかし、雄弁は、サブクエリに関連する親モデルの「事前ロード」することができます。N + 1クエリ問題を緩和することができプリロード。

遅延ロードを使用する場合は、ときにそれを事前にロードされて使用するには?だけ遅延読み込みの使用を実証する必要がある内容で事前ロードされたコンテンツを使用して提示するコンテンツリストデータ。

おすすめ

転載: www.cnblogs.com/webclz/p/10932113.html