2016-07-22 17 views
2

Die Abfrage funktioniert gut, und in meinem alten PDO-basierten Code konnte ich verwandte Tabellenmodelle innerhalb des übergeordneten Modells verschachteln, wenn ich verknüpfte Tabellen abfrage. Mit diesem Code:Wie kann ich die Ergebniseinheit einer verknüpften Tabelle in Doctrine in eine andere Entität kapseln?

$qry = $em->createQueryBuilder() 
      ->select('l', 'a') 
      ->from('AppBundle:Hflogs', 'l') 
      ->leftJoin('AppBundle:HflogSwLocations', 'a') 
      ->where($em->createQueryBuilder()->expr()->notIn('l.id', $sub->getDQL())) 
      ->orderBy('l.submitted', 'DESC') 
      ->setMaxResults(50); 

     $logs = $qry->getQuery()->getResult(); 
     dump($logs); die(); 

Das Schema Teil, dass diese Abfrage verwendet, ist ein ich eine parallele Beziehung erraten als Hflog, keine Beziehung zu Positionen enthält stattdessen ich einen Anschluss Tabelle verwenden, die Hflog spezifisch ist nur Standorte.

enter image description here

Die Lehre Annotations für HflogSwlocations:

/** 
    * @var \AppBundle\Entity\Hflogs 
    * 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Hflogs") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="hflog_id", referencedColumnName="id") 
    * }) 
    * @SerialGroups({"public"}) 
    * 
    */ 
    private $hflog; 

/** 
* @var \AppBundle\Entity\SwLocations 
* 
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\SwLocations") 
* @ORM\JoinColumns({ 
* @ORM\JoinColumn(name="sw_loc_id", referencedColumnName="id") 
* }) 
* @SerialGroups({"public"}) 
* 
*/ 
private $swLoc; 

gibt diese:

array:51 [▼ 
    0 => Hflogs {#450 ▶} 
    1 => HflogSwLocations {#569 ▶} 
    2 => HflogSwLocations {#413 ▶} 
    3 => HflogSwLocations {#420 ▶} 
    4 => HflogSwLocations {#437 ▶} 
    5 => HflogSwLocations {#558 ▶} 
    6 => HflogSwLocations {#555 ▶} 
    7 => HflogSwLocations {#442 ▶} 
    8 => HflogSwLocations {#584 ▶} 
    9 => HflogSwLocations {#587 ▶} 

HflogSwLocations gehört zu HFlogs.

Ich kann bekommen, was ich brauche, aber die Art, wie die Ergebnisse zur Verfügung gestellt werden scheinen für mich nicht intuitiv. Wenn ein Hflogs ein HflogSwLocations hat, möchte ich Hflogs mit HFlogSwLocations zurückgegeben werden, die als Teil der relationalen Entität eingekapselt sind. Wie erreiche ich dies mit einer Doctrine-Abfrage?

+0

Werfen Sie einen Blick darauf, wie Sie Links mit DQL verbinden. – Cerad

Antwort

0

Sie sollten nicht angeben müssen, dass Sie 'a' in Ihrer Abfrage abrufen möchten. Alles, was Sie tun müssen, ist HfLogs abzurufen. Then it's all about lazy loading.

+0

Was meinen Sie damit, dass Sie 'a' nicht abrufen? Lassen Sie es aus der Select-Methode heraus? Sollte ich mich mit der leftJoin-Methode beschäftigen? – cj5

+0

In Ihrem select() in Ihrem Query Builder wählen Sie die HfLogs (aliased durch 'l' und einige locations (aliased durch 'a'). Sie müssen den leftJoin nicht mit dem 'a' angeben Wenn Sie auf Ihre HfLogs-Eigenschaften zugreifen, haben Sie die Speicherorte direkt auf Ihren Objekten verfügbar – MeuhMeuh

+0

Könnten Sie mir eine Neufassung meiner Abfrage erstellen? – cj5