我试图映射一个工作结果从Zend2/Doctrine2到循环通过我的index.phtml的结果。
我的查询如下:
SELECT
m.id,
t.name,
m.track_id,
m.date,
min(r.date) as minpost,
max(r.date) as maxpost,
count(r.id) as races
FROM
Meeting m, Track t, Race r
WHERE
m.track_id = t.id and r.meeting_id = m.id and m.date >= CURRENT_DATE()
GROUP BY
m.id, t.name, m.track_id, m.date
查询工作,我得到这样的结果(与var_dump显示):
array (size=3)
0 =>
array (size=10)
'id' => int 1
...
1 =>
array (size=10)
'id' => int 2
...
2 =>
array (size=10)
'id' => int 3
...
我无法让它匹配我在基本的Zend2/Doctrine2 -示例中得到的结果,它看起来像:
array (size=6)
0 =>
object(Album'Entity'Album)[305]
...
...
我的问题是:如何使用Zend2/Doctrine2从显示的SQL中获得对象数组,以便在index.phtml中循环使用?
我很感谢任何答案!
致以最亲切的问候rholtermann
正如我从你的问题中理解的那样,你想要的结果是一个对象数组,而不是一个具有对象属性的嵌套数组。如果您想要一个对象数组,您应该更改SELECT子句。现在,您在SELECT子句中请求不同的属性,这意味着Doctrine永远不会返回特定类型对象的同构集合。只需将select子句更改为例如:
SELECT m FROM Meeting m WHERE ...
如果你想在你的结果中获取Track
和Race
实体的连接,你应该使用在doctrine2文档中描述的fetch join
Doctrine将返回结果(在Meeting集合中)中合并的实体。
我重读了你的问题,我想我现在明白你的意思了。您可能希望显示数组值,而不是对象。
查询的结果是一个充满Doctrine Entity Objects的array
。这意味着你可以:
foreach($yourObjects as $key => $entity) {
//getter and setter methods like
...
var_dump($entity->getId());
...
}
另外,你可以实现一个方法来返回实体的变量,而不是调用每个getter。
//within your Entity.php
public function getArrayCopy()
{
return get_object_vars($this);
}