2017-05-17 4 views
1

ist hier ein Doktrin Experte, der mir erklären kann, warum diese DQLs nicht initialisiert werden tallyRevs Feld auf Tally Einheit? Ich vermute, dass, wenn ich TallyRevs (Eigentümerseite) und fetchJoin Tally Einheit zu ihnen holen, dieses Feld tallyRevs initialisiert wird. Was mache ich falsch? Ich muss wählen TallyRev basierend auf einigen Kriterien über DQL und da es eine bidirektionale Verbindung ist, möchte ich es von der anderen (Tally.tallyRevs) Seite auch initialisiert werden.Doctrine2, DQL, Assoziation nicht initialisiert

Screen of dump

<?php 


/** 
* @ORM\Entity 
* @ORM\Table(name="v3_overview_calloff_tally") 
*/ 
class Tally 
{ 

    /** 
    * @var int 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var TallyRev[]|Collection 
    * @ORM\OneToMany(targetEntity="STI\Model\Entity\V3\Overview\CallOff\TallyRev", mappedBy="tally") 
    */ 
    private $tallyRevs; 
} 


/** 
* @ORM\Entity 
* @ORM\Table(name="v3_overview_calloff_tallyrev") 
*/ 
class TallyRev 
{ 

    /** 
    * @var int 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var int 
    * @ORM\Column(type="integer", nullable=false) 
    */ 
    private $revision; 

    /** 
    * @var Tally 
    * @ORM\ManyToOne(targetEntity="STI\Model\Entity\V3\Overview\CallOff\Tally", inversedBy="tallyRevs") 
    * @ORM\JoinColumn(name="tally_id", referencedColumnName="id", nullable=false) 
    */ 
    private $tally; 
} 

Hier einige Repository-Code:

$qb = $repository->createQueryBuilder(); 
$qb 
    ->select('tallyRev') 
    ->from(TallyRev::class, 'tallyRev', 'tallyRev.id') 
    // complicated filtering, this is just an example 
    ->andWhere($qb->expr()->in('tallyRev.revision', ':rev')) 
    ->setParameter('rev', $rev) 
; 
$tallyRevs = $qb->getQuery()->getResult(); 

$ids = array_keys($tallyRevs); 

$qb2 = $repository->createQueryBuilder(); 
$qb2 
    ->select('partial tallyRev.{id}') 
    ->from(TallyRev::class, 'tallyRev', 'tallyRev.id') 
    ->andWhere($qb2->expr()->in('tallyRev.id', ':ids')) 
    ->setParameter('ids', $ids) 
    ->leftJoin('tallyRev.tally', 'tally') 
    ->addSelect('tally') 
; 
$qb2->getQuery()->getResult(); 

Ich weiß, dass ich DQL von der Tally Seite wie folgt schreiben kann:

$qb 
    ->select('tally') 
    ->from(Tally::class, 'tally', 'tally.id') 
    ->leftJoin('tally.tallyRev', 'tallyRev') 
    ->addSelect('tallyRev') 
    ->andWhere($qb->expr()->in('tallyRev.revision', ':rev')) 
    ->setParameter('rev', $revs) 
; 

Antwort

0

Wenn Sie möchten, um tally tally zu holen, wenn du tallyRev holst, solltest du sowas im ersten qb und de schreiben lete qb2

->select(['tallyRev', 'tally']) 
->from(TallyRev::class, 'tallyRev', 'tallyRev.id') 
->join('tallyRev.tally', 'tally') 
// complicated filtering, this is just an example 
->andWhere($qb->expr()->in('tallyRev.revision', ':rev')) 
->setParameter('rev', $rev) 

;