TODO #18371

ブログ記事一覧で記事件数が多いときにエラーになる

坂口 昌己1年以上前に追加. 1年以上前に更新.

ステータス:終了開始日:
優先度:通常期日:
担当者:坂口 昌己進捗率:

100%

カテゴリ:ブログ
対象バージョン:4.0.8

説明

ブログ記事数が多い時に一覧表示を100件などにした時など、
タイムアウトやメモリオーバーで表示できなくなる場合がある。

baserCMS 4.0.5以降で発生を確認しました。

原因は、
https://github.com/baserproject/basercms/commit/424493125a12b97ebfbb39c36c9381f79ccd4a5a
のコミットで recursive = 2に変更になり、
find時に不要なデータを取得してしまっているようです。

  • Ver. 4.0.5 以前 : recursive指定なし(recursive = 0)
    array(
        (int) 0 => array(
            'BlogPost' => array( ... ),
            'BlogCategory' => array( ... ),
            'User' => array( ... ),
            'BlogContent' => array( ... ),
            'BlogComment' => array( ... ),
            'BlogTag' => array( ... ),
        ),
    
        :
    
        (int) xxx => array(
            'BlogPost' => array( ... ),
            'BlogCategory' => array( ... ),
            'User' => array( ... ),
            'BlogContent' => array( ... ),
            'BlogComment' => array( ... ),
            'BlogTag' => array( ... ),
        ),
    )
    

Ver. 4.0.5〜現状: recursive = 2

array(
    (int) 0 => array(
        'BlogPost' => array(
        ),
        'BlogCategory' => array(
            ...
            'BlogPost' => array(
                    (int) 0 => array( ... ),
                            ;
                    (int) xxx => array( ... ),  
            ),
        ),
        'User' => array(
            ...
            'UserGroup' => array( ... ),
            'Favorite' => array( ... ),
        ),
        'BlogContent' => array(
            ...
            'Content' => array( ... ),
            'BlogPost' => array(
                    (int) 0 => array( ... ),
                            ;
                    (int) xxx => array( ... ),
            ),
            'BlogCategory' => array( ... ),
        ),
        'BlogComment' => array( ... ),
        'BlogTag' => array( ... ),
    ),
            :
    (int) xxx => array(
        'BlogPost' => array(
        ),
        'BlogCategory' => array(
            ...
            'BlogPost' => array(
                    (int) 0 => array( ... ),
                            ;
                    (int) xxx => array( ... ),
            ),
        ),
        'User' => array(
            ...
            'UserGroup' => array( ... ),
            'Favorite' => array( ... ),
        ),
        'BlogContent' => array(
            ...
            'Content' => array( ... ),
            'BlogPost' => array(
                    (int) 0 => array( ... ),
                            ;
                    (int) xxx => array( ... ),
            ),
            'BlogCategory' => array( ... ),
        ),
        'BlogComment' => array( ... ),
        'BlogTag' => array( ... ),
    ),
)

※ 追記 : BlogCategoryモデルとBlogContentモデルのアソシエーションでlimit = 10が指定されているのである程度は防げているが、想定外の動作になっていると思われます。


関係しているリビジョン

リビジョン 9f46a8bb
K.A.Burk が1年以上前に追加

fix #18371 ブログ記事一覧で記事件数が多いときにエラーになる問題を改善 (#725)

履歴

#1 坂口 昌己1年以上前に更新

  • 説明 を更新 (diff)

#2 坂口 昌己1年以上前に更新

  • 担当者坂口 昌己 にセット

#3 江頭 竜二1年以上前に更新

坂口さん、報告ありがとうございます。

プラグイン再度で動的にアソシエーションをする事を考えると、recursive = 2 は外さず、不要なモデルをController側でunbind するやり方で改善したいところです。

#4 匿名ユーザー が1年以上前に更新

  • ステータス担当 から 解決 に変更
  • 進捗率0 から 100 に変更

更新履歴 basercms|commit:9f46a8bbec468c4359a4a400de5cdf151f8d9b76 で適用されました。

#5 江頭 竜二1年以上前に更新

  • 対象バージョン4.0.8 にセット

#6 江頭 竜二1年以上前に更新

  • ステータス解決 から 終了 に変更

他の形式にエクスポート: Atom PDF