バージョン選択

フォーラム

メニュー

オンライン状況

36 人のユーザが現在オンラインです。 (28 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 36
もっと...

サイト内検索

質問 > フロント機能 > 価格帯で絞り込みたい

フロント機能

新規スレッドを追加する

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
miqro
投稿日時: 2019/6/27 15:52
対応状況: −−−
新米
登録日: 2019/6/24
居住地:
投稿: 9
Re: 価格帯で絞り込みたい
お返事ありがとうございます。

ec-cube\src\Eccube\Repository\ProductRepository.php::getQueryBuilderBySearchData

上記ファイルで仮に価格高い順もしくは低い順が選択されていたとき


        if (!empty($searchData['orderby']) && $searchData['orderby']->getId() == $config['eccube_product_order_price_lower']) {
            //@see http://doctrine-orm.readthedocs.org/en/latest/reference/dql-doctrine-query-language.html
            $qb->addSelect('MIN(pc.price02) as HIDDEN price02_min');
            $qb->innerJoin('p.ProductClasses', 'pc');
            $qb->andWhere('pc.visible = true');
            $qb->groupBy('p.id');
            $qb->orderBy('price02_min', 'ASC');
            $qb->addOrderBy('p.id', 'DESC');
        // 価格高い順
        } elseif (!empty($searchData['orderby']) && $searchData['orderby']->getId() == $config['eccube_product_order_price_higher']) {
            $qb->addSelect('MAX(pc.price02) as HIDDEN price02_max');
            $qb->innerJoin('p.ProductClasses', 'pc');
            $qb->andWhere('pc.visible = true');
            $qb->groupBy('p.id');
            $qb->orderBy('price02_max', 'DESC');
            $qb->addOrderBy('p.id', 'DESC');
        // 新着順
        }


の処理が走りますが、もしMAX()を使わないとなると、規格が2つ存在する商品の場合、どちらのprice02を評価するか分からなくないですか?


それとMAX()指定をしたカラムはwhere文から参照できないみたいですね、なので今回は以下のように対応してみました。


// EccubeEvents::FRONT_PRODUCT_INDEX_SEARCHでのイベントフック

      // $subを2回使おうとしましたが、別名の重複で出来ませんでした。 
            $sub = $this->ProductClassRepository->createQueryBuilder('sub1');
            $sub
                ->select('MAX(sub1.price02)')
                ->where('sub1.Product = p.id')
                ;

            $sub2 = $this->ProductClassRepository->createQueryBuilder('sub2');
            $sub2
                ->select('MAX(sub2.price02)')
                ->where('sub2.Product = p.id')
                ;

              $qb
                ->andWhere(sprintf('(%s)', $sub->getDQL()).' >= :price_min')
                ->andWhere(sprintf('(%s)', $sub2->getDQL()).' <= :price_max')
                ->setParameter('price_min', $min)
                ->setParameter('price_max', $max)
                ;


もっとスマートに出来ればいいんですが・・・。

フラット表示 前のトピック | 次のトピック


題名 投稿者 日時
   価格帯で絞り込みたい miqro 2019/6/24 20:54
     Re: 価格帯で絞り込みたい tao_s 2019/6/26 9:56
     » Re: 価格帯で絞り込みたい miqro 2019/6/27 15:52

 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は89,149名です
総投稿数は110,046件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1650
8
red
1570
9
mcontact
1299
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.