複合主キー (expertise_id、tag_id、person_id) を持つExpertise, Person and Tag,
結合エンティティを介して関連する3 つのエンティティがあります。AssociatedTag
これは正しく動作します。
複数の人が同じタグを特定のエキスパートに追加できるため、各タグ文字列を表示するだけで重複が発生する可能性があります。Symfony で作業していなければ、次のような集計クエリを実行します。
SELECT
t.tag, a.tag_id
a.expertise_id,
COUNT(a.person_id) AS tagcount,
SUM(CASE
WHEN a.person_id = ? THEN 1
ELSE 0
END) AS has_curuser
FROM
expertise_tags a
JOIN
tag t ON (a.tag_id = t.id)
WHERE
a.expertise_id = ? #397
GROUP BY t.tag , a.expertise_id;
次のようなデータが生成されます。
foobe 9 397 1 0
neato 7 397 2 1
pita 8 397 1 0
次に、出力オプションを制御するために、has_curuser == TRUE
とのような単純なループと条件で出力します。tagcount > 1
Symfony については、集計結果を保持するためのクラスが必要か、集計されていない結果を取得してそれらを集計するデータ トランスフォーマーまたは Twig 拡張機能が必要であるという印象を受けます (非効率的ですが)。
この状況に対する正しい Symfony のアプローチは何ですか?