2

複合主キー (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 のアプローチは何ですか?

4

1 に答える 1

0

ドクトリン DQL は、複雑なクエリに対してネイティブ SQL 言語の機能の限られた部分をサポートしているため、ネイティブ クエリを使用できます。

NativeQuery を使用すると、ネイティブの SELECT SQL ステートメントを実行し、結果を Doctrine エンティティまたは Doctrine がサポートするその他の結果フォーマットにマップできます。

于 2013-08-31T15:06:24.067 に答える