我有 3 个Expertise, Person and Tag,
通过连接实体相关的实体,AssociatedTag
该实体具有复合主键(expertise_id、tag_id、person_id)。这可以正常工作。
因为多个人员可以将相同的标签添加到特定的专业知识,所以简单地显示每个标签字符串可能会导致重复。如果我不在 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 方法是什么?