DoctrineのQueryBuilder(クエリビルダ)でhavingを使った絞り込みを行う時、下記のエラーが発生することがあります。

Cannot count query that uses a HAVING clause. Use the output walkers for pagination

Cannot count query that uses a HAVING clause. Use the output walkers for pagination

ページネーションを行なっているフロント側の商品一覧ページでHavingやaddHavingを使うと上記のエラーが発生することがあります。
とはいえ、商品価格や販売個数などのAVERAGEやSUM、MIN、MAXで商品を絞り込みしたい場合もありますよね。

その時は、ページネーションの生成箇所でwrap_queryを使ってやるとエラーがなく実行できるようになります。
商品一覧ページのProductControllerであれば、元々のコードは下記のようになっています。

Eccube\Controller\ProductController::indexメソッド内のページネーションを生成している箇所

$pagination = $app['paginator']()->paginate(
    $qb,
    !empty($searchData['pageno']) ? $searchData['pageno'] : 1,
    $searchData['disp_number']->getId()
);

下のように書き直します。

$pagination = $app['paginator']()->paginate(
    $qb,
    !empty($searchData['pageno']) ? $searchData['pageno'] : 1,
    $searchData['disp_number']->getId(),
    array('wrap-queries' => true)
);

これで正常にページネーションが動作するようになります。