Doctrine - 将连接行作为数组返回

时间:2015-05-15 15:36:13

标签: symfony doctrine-orm

给出以下结构:http://sqlfiddle.com/#!9/fdc467/1

我正在使用Doctrine的查询构建器,此时我可以在小提琴中运行查询以获取以下数据:

name  | reason       |  SUM(`cost`)
------------------------------------
Tom   | Consulting   |  250
Tom   | Setup        |  50
Tom   | Subscription |  25
Dick  | Setup        |  50
Dick  | Subscription |  25
Harry | Consulting   |  75
Harry | Setup        |  50

但我想让数据水合如下:

array(
    array(
        'name' => 'Tom',
        'charges' => array(
            'Consulting' => 250,
            'Setup' => 250,
            'Subscription' => 250
        )
    ),
    array(
        'name' => 'Dick',
        'charges' => array(
            'Setup' => 50,
            'Subscription' => 25
        )
    ),
    array(
        'name' => 'Harry',
        'charges' => array(
            'Consulting' => 75,
            'Setup' => 50
        )
    )
);

有没有办法告诉Doctrine在保湿时将每个用户的reason => SUM(cost)值分组到一个数组中?

当我通过执行多次查询并迭代按照我的意愿设置数据时这样做,但随着更多原因的添加或结构的更改,维护变得很烦人。

1 个答案:

答案 0 :(得分:2)

您可以创建自己的Data Hydrator

这样,您不必复制迭代逻辑,只需将水化器传递给getResult,它就会为您操纵数据。

有一个blog post,你可以使用Doctrine代码库作为灵感来源:SimpleObjectHydrator classArrayHydrator classScalarHydrator class