質問 > フロント機能 > カテゴリにて、商品があるカテゴリのみ表示させたい |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
tomaton20 |
投稿日時: 2023/9/30 15:24
対応状況: −−−
|
新米 ![]() ![]() 登録日: 2023/9/8 居住地: 投稿: 4 |
カテゴリにて、商品があるカテゴリのみ表示させたい ▼テンプレート
[EC-CUBE] 4 [レンタルサーバ] なし [OS] aluma linux [PHP] 8.2 [データベース] maria db 10 [WEBサーバ] apache 2 [ブラウザ] chrome 現在、カテゴリは登録したものが全て表示される仕組みですが、 これを大、中、小、カテゴリ全てにおいて、商品がある場合のみ、 そのカテゴリを表示させたいと考えています。 デフォルトのCategoryRepository.phpでの、 getListメソッドでカテゴリを出力させているようですが、 こちらをどのようにすれば商品のみに絞り込むことが可能になりますか? プレーンなsqlであれば、dtb_product_categoryテーブルをeq句にて、 サブクエリを発行すればよいかと思います。 現状のgetListメソッドでは、 $qb = $this->createQueryBuilder('c1') ->select('c1, c2, c3, c4, c5') ->leftJoin('c1.Children', 'c2') ->leftJoin('c2.Children', 'c3') ->leftJoin('c3.Children', 'c4') ->leftJoin('c4.Children', 'c5') ->orderBy('c1.sort_no', 'DESC') ->addOrderBy('c2.sort_no', 'DESC') ->addOrderBy('c3.sort_no', 'DESC') ->addOrderBy('c4.sort_no', 'DESC') ->addOrderBy('c5.sort_no', 'DESC'); という形にて、カテゴリ用のリストを生成しておりますが、 ここにandWhereを新たに追加し、 $qb2 = $this->getRepository('Eccube\Entity\ProductCategory')->createQueryBuilder('pc')->select('pc.category_id'); $qb->andWhere($qb->expr()->eq('c1.id', $qb2->getDql())); というような条件を追加したいと考えております。 ちなみにこのパターンだとエラーとなります。 ECCUBE自体がど素人なため、どなたかご教授いただければ幸いです。 よろしくお願い致します。 |
mcontact |
投稿日時: 2023/10/1 14:04
対応状況: −−−
|
神 ![]() ![]() 登録日: 2022/1/22 居住地: 投稿: 1662 |
Re: カテゴリにて、商品があるカテゴリのみ表示させたい EC-CUBEは、Symfonyというフレームワーク上で動作していますのでDoctrineのQueryBuilderを参照してみてください。
https://www.google.com/search?q=symfony+QueryBuilder&client=ms-android-sony-terr1-rso2t&sca_esv=569801783&sxsrf=AM9HkKmrfhRQn2Yj33LhzfK2cLtzRcVt6Q%3A1696136278858&ei=VvwYZZ6ENIHQ2roPi_K64A8&oq=symfony+QueryBuilder&gs_lp=EhNtb2JpbGUtZ3dzLXdpei1zZXJwIhRzeW1mb255IFF1ZXJ5QnVpbGRlcjIFEAAYgAQyBRAAGIAEMgQQABgeMgQQABgeMgQQABgeMgQQABgeMgQQABgeMgQQABgeSP4gUM4GWIYacAF4AJABAJgB-AGgAZsHqgEFMC4zLjK4AQPIAQD4AQH4AQLCAgoQABhHGNYEGLADwgIHECMYigUYJ8ICChAAGIAEGLEDGArCAgcQABiABBgK4gMEGAAgQYgGAZAGCg&sclient=mobile-gws-wiz-serp
|
tomaton20 |
投稿日時: 2023/10/1 17:52
対応状況: 解決済
|
新米 ![]() ![]() 登録日: 2023/9/8 居住地: 投稿: 4 |
Re: カテゴリにて、商品があるカテゴリのみ表示させたい 自己解決です。
$qb = $this->createQueryBuilder('c1') ->select('c1, c2, c3, c4, c5') ->leftJoin('c1.Children', 'c2') ->leftJoin('c2.Children', 'c3') ->leftJoin('c3.Children', 'c4') ->leftJoin('c4.Children', 'c5') ->orderBy('c1.sort_no', 'DESC') ->addOrderBy('c2.sort_no', 'DESC') ->addOrderBy('c3.sort_no', 'DESC') ->addOrderBy('c4.sort_no', 'DESC') ->addOrderBy('c5.sort_no', 'DESC'); /** * 絞り込みように追加 */ $qb2 = $this->createQueryBuilder('c')->from("Eccube\\Entity\\ProductCategory", 'pc')->select('pc.category_id')->andWhere('c.id = pc.category_id'); $qb->andWhere("c3.id IN ({$qb2->getDql()})"); とりえあえずのところ、3階層目まで必ずデータがあるパターンだったため、 3階層目をターゲットにし、商品がなければカテゴリを全て表示しない、 という形で解決としました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |