给出以下结构: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)
值分组到一个数组中?
当我通过执行多次查询并迭代按照我的意愿设置数据时这样做,但随着更多原因的添加或结构的更改,维护变得很烦人。
答案 0 :(得分:2)
您可以创建自己的Data Hydrator。
这样,您不必复制迭代逻辑,只需将水化器传递给getResult
,它就会为您操纵数据。
有一个blog post,你可以使用Doctrine代码库作为灵感来源:SimpleObjectHydrator class,ArrayHydrator class和ScalarHydrator class。