2017-06-28 3 views
1

Ich bin auf einem Symfony Projekt arbeiten und versuchen, einiges Ergebnis von meinem BDD zu bekommen Also, was ich tue ist:getArrayResult geben doppeltes Ergebnis

$result1 = $this->createQueryBuilder('p') 
->leftJoin('p.payments','payments') 
->select('p.id, payments.name') 
->getQuery() 
->getArrayResult(); 
return $result1; 

In meinem Unternehmen hat ich:

/** 
* @ORM\OneToMany(targetEntity="RB\OrdersBundle\Entity\Payment",mappedBy="purchase",cascade={"persist"}) 
*/ 
private $payments; 

und in meiner Zahlungseinheit:

/** 
* @ORM\ManyToOne(targetEntity="RB\OrdersBundle\Entity\Purchase") 
* @ORM\JoinColumn(nullable=false, onDelete="CASCADE") 
*/ 
private $purchase; 

Was ich habe: Ein Kauf kann mehrere Zahlungen haben. Und meine Anfrage gibt mir so viele Ergebnisse wie die Anzahl der Zahlungen. exemple:

[ 
    { 
     "id" : 1 
     "name" : "name1" 
    } 
    { 
     "id" : 1 
     "name" : "name2" 
    } 
] 

Was ich will: ich ein einzelnes Ergebnis mit einer Reihe von Zahlungs Namen wie das wollen:

[ 
    { 
     "id" : 1 
     "name": ["name1","name2"] 
    } 
] 

Antwort

1

Was Sie wollen, ist nicht wirklich ein „Array Ergebnis“, Sie möchte nur einen anderen "Hydrationsmodus" als den normalen verwenden, der viel Zeit braucht.

Versuchen Sie folgendes:

use Doctrine\ORM\Query; 

... 

$query = $em->getRepository('YourRepo') 
       ->createQueryBuilder('p') 
       ->innerJoin('p.payments','payments') 
       ->addSelect('payments') 
       ->getQuery() 
       ->getResult(Query::HYDRATE_ARRAY); 

Mehr Informationen über die Dokumentation:

http://docs.doctrine-project.org/projects/doctrine1/en/latest/en/manual/data-hydrators.html