EC-CUBE3(EC-CUBE4も同じかもしれませんが)で
・「在庫なし」商品を最後にまとめたいときに在庫数でソートすると良い
https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=20257&forum=11
・「在庫なし」商品を表示する、しないボタンを付ける
普通でしたらこれで十分大丈夫なのですが、
在庫数のソートを入れるとエラーになる場合
↓のようにすると
src/Eccube/Repository/ProductRepository.php
getQueryBuilderBySearchData() に
$qb -> orderBy(‘pc.stock’, ‘DESC’);
「システムエラーが発生しました。」
が出てしまう場合の対処方法です。
原因はMySQLのバージョン
こちらが参考になります
上記リンクが切れた時のために内容を話しますと
「MySQL5.7で
$queryBuilder = $this
->createQueryBuilder(‘recipient’)
->leftJoin(‘recipient.message’, ‘message’)
->orderBy(‘message.dateSent’, ‘DESC’);
したときに
「message.dateSentはSELECTのリストに表示されていないです!」
とエラーになるという事です。
MySQL5.5モジュール版でも起こります。
解決方法:SELECTにいれる
src/Eccube/Repository/ProductRepository.php
getQueryBuilderBySearchData()の該当箇所で
$qb->addSelect('pc.stock as HIDDEN stock'); $qb->OrderBy('stock', 'DESC');
としてやると上手くいきます。
その前にきちんと
$qb->innerJoin(‘p.ProductClasses’, ‘pc’);
されていることも確認してください。
コメント