バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > カテゴリにて、商品があるカテゴリのみ表示させたい

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
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: カテゴリにて、商品があるカテゴリのみ表示させたい
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階層目をターゲットにし、商品がなければカテゴリを全て表示しない、
という形で解決としました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は102,609名です
総投稿数は112,370件です

投稿数ランキング

1
seasoft
7369
2
468
3217
3
AMUAMU
2712
4
nanasess
2330
5
umebius
2085
6
h_tanaka
1959
7
yuh
1900
8
mcontact
1662
9
red
1579
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
805
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
balisys
502


ネットショップの壺

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

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