如何使用Zend2和Doctrine2获得稍微复杂一点的SQL对象数组


How to get an array of objects of a little more complex SQL with Zend2 and Doctrine2?

我试图映射一个工作结果从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 ...

如果你想在你的结果中获取TrackRace实体的连接,你应该使用在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);
}