doumiyi7063 2014-04-03 14:36
浏览 29

ZF2和Doctrine 2将结果集转换为Array

I use Zend Framework 2 with Doctrine 2. Here is my problem

The following returns Array of Objects

$results = $em->getRepository('MyProject\Domain\User')->find($id);

Returns:

array (size=4)
  0 => 
    object(My\Entity\User)[3]
      private 'id' => int 1
      private 'firstName' => string 'joe' (length=3)
      private 'lastName' => string 'smith' (length=5)
  1 =>
      object(My\Entity\User)[3]
      private 'id' => int 1
      private 'firstName' => string 'joe' (length=3)
      private 'lastName' => string 'smith' (length=5)
  3 => 
    object(My\Entity\User)[3]
      private 'id' => int 1
      private 'firstName' => string 'joe' (length=3)
      private 'lastName' => string 'smith' (length=5)
  4 =>
      object(My\Entity\User)[3]
      private 'id' => int 1
      private 'firstName' => string 'joe' (length=3)
      private 'lastName' => string 'smith' (length=5)

I want to convert it to Array of Arrays like so:

array (size=4)
      0 =>
      array (size=3)
      ['id'] => int 1
      ['firstName'] => string 'joe' (length=3)
      ['lastName'] => string 'smith' (length=5)
      1 =>
      array (size=3)
      ['id'] => int 1
      ['firstName'] => string 'joe' (length=3)
      ['lastName'] => string 'smith' (length=5)
      2 =>
      array (size=3)
      ['id'] => int 1
      ['firstName'] => string 'joe' (length=3)
      ['lastName'] => string 'smith' (length=5)
      3 =>
      array (size=3)
      ['id'] => int 1
      ['firstName'] => string 'joe' (length=3)
      ['lastName'] => string 'smith' (length=5)

I have tried the following:

$resultsArray = new \Doctrine\Common\Collections\ArrayCollection($results);
$resultsArray->toArray();

$resultsArray = new \Zend\Stdlib\ArrayObject($results);
$resultsArray->getArrayCopy();

Both return this:

array (size=4)
  0 => 
    object(My\Entity\User)[3]
      private 'id' => int 1
      private 'firstName' => string 'joe' (length=3)
      private 'lastName' => string 'smith' (length=5)
  1 =>
      object(My\Entity\User)[3]
      private 'id' => int 1
      private 'firstName' => string 'joe' (length=3)
      private 'lastName' => string 'smith' (length=5)
  3 => 
    object(My\Entity\User)[3]
      private 'id' => int 1
      private 'firstName' => string 'joe' (length=3)
      private 'lastName' => string 'smith' (length=5)
  4 =>
      object(My\Entity\User)[3]
      private 'id' => int 1
      private 'firstName' => string 'joe' (length=3)
      private 'lastName' => string 'smith' (length=5)

How can I accomplish this? What is the recommended way of doing it?

  • 写回答

3条回答 默认 最新

  • dtstnjl898781429 2014-04-03 17:04
    关注

    Traditionally, I write a custom repository class and call a getArrayResult() inside of it

            $dql = 'MYDQLHERE';
            $query = $this->getEntityManager()->createQuery($dql);
            $query->execute();
            $result =  $query->getArrayResult();
    

    I believe your other option is custom hydration modes, although I don't have experience with them. http://docs.doctrine-project.org/en/latest/reference/dql-doctrine-query-language.html#custom-hydration-modes

    评论

报告相同问题?