Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
显示聚合实体数据的Symfony方法_Symfony_Aggregate Functions - Fatal编程技术网

显示聚合实体数据的Symfony方法

显示聚合实体数据的Symfony方法,symfony,aggregate-functions,Symfony,Aggregate Functions,我有3个实体experties,Person和Tag,通过一个join实体关联,AssociatedTag,它有一个复合主键(experties\u id,Tag\u id,Person\u id)。这是正确的 因为不止一个人可以将同一个标记添加到特定的专业技能中,所以简单地显示每个标记字符串可能会导致重复。如果我不是在Symfony中工作,我只会执行类似于以下内容的聚合查询: SELECT t.tag, a.tag_id a.expertise_id, COUNT(a

我有3个实体
experties,Person和Tag,
通过一个join实体关联,
AssociatedTag
,它有一个复合主键(experties\u id,Tag\u id,Person\u 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\u curuser==TRUE
标记计数>1
,以控制输出选项

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


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

由于原则DQL支持用于复杂查询的本机SQL语言功能的有限部分,您可以使用

使用NativeQuery,您可以执行本机SELECT SQL语句和映射 将结果发送给条令实体或支持的任何其他结果格式 根据教义


很少有人误解这个问题,问题是执行查询或输出结果?@forgottenbas:如果查询是正确的,它应该去哪里(可能是控制器?)以及如何去做;如果查询不正确,如何输出
AssociatedTag
集合,以便考虑聚合特征。一种可能的解决方案是使用本机查询。我在回答中描述了这一点。是的,您可以在控制器、实体存储库或自定义服务中运行查询。