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の開発が一気に楽になります!