EC-CUBE4ではタグ管理が標準で実装されより便利になったタグ機能ですが、タグが設定された商品リストをプログラムで取得するにはどのようなコードを書けば良いでしょうか?
新着タグやおすすめタグがついた商品の一覧を取得したいというシーンは多いはずですので、EC-CUBE3バージョンと4バージョンで紹介します。
EC-CUBE4系の場合
E-CUBE4だと表示したいページのコントローラー内で次のように書くことができます。
例えばID3のタグが設定された商品を取得したい場合、
$qb = $this->entityManager->getRepository('Eccube\Entity\Product') ->createQueryBuilder('p'); $qb->innerJoin('p.ProductTag', 'pt') ->innerJoin('pt.Tag', 't') ->andWhere('t = :Tag') ->setParameter('Tag', 3); $Products = $qb->getQuery()->getResult();
考え方としては簡単で、Productレポジトリのクエリビルダを生成し、ProductTag、TagエンティティをJoinしています。
クエリビルダの結果を取得すればID3のタグが設定された商品一覧を配列で取得できます。
EC-CUBE3系の場合
EC-CUBE3では$app変数を使用して次のように書くことができます。
$qb = $app['eccube.repository.product'] ->createQueryBuilder('p'); $qb->innerJoin('p.ProductTag', 'pt') ->innerJoin('pt.Tag', 't') ->andWhere('t = :Tag') ->setParameter('Tag', 3); $Products = $qb->getQuery()->getResult();
レポジトリの取得方法以外は全く同じですね。
クエリビルダーを使いこなすとEC-CUBEの開発が一気に楽になります!
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。