2

我有 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 == TRUEtagcount > 1来控制输出选项。

我对 Symfony 的印象是,应该有一个类来保存聚合结果,或者应该有一个数据转换器或 Twig 扩展来获取未聚合的结果并聚合它们(尽管这似乎效率低下)。

对于这种情况,正确的 Symfony 方法是什么?

4

1 回答 1

0

由于 DQL 学说支持复杂查询的原生 SQL 语言功能的有限部分,因此您可以使用原生查询

使用 NativeQuery,您可以执行本机 SELECT SQL 语句并将结果映射到 Doctrine 实体或 Doctrine 支持的任何其他结果格式。

于 2013-08-31T15:06:24.067 回答