2016-07-22 2 views
2

クエリはうまく機能し、古いPDOベースのコードでは、結合されたテーブルをクエリするときに、親モデル内で関連するテーブルモデルをネストすることができました。このコードを使用する:このクエリが利用するどのようにして、結合されたテーブルの結果エンティティをDoctrineの別のエンティティにカプセル化できますか?

$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(); 

スキーマの一部を、Hflogは場所に関係が含まれていないように私が代わりに私がHflogに固有のコネクタテーブルを、使用しています、平行関係を推測です場所のみ。 HflogSwlocationsため

enter image description here

教義のannotaions:

/** 
    * @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; 

戻り、この:

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 HFlogsに属します。

私は必要なものを手に入れることができますが、結果が提供される方法は私には直感的ではありません。 HflogsにHflogSwLocationsがある場合、HFlogSwLocationsを関係エンティティの一部としてカプセル化してHflogsを返すようにします。 Doctrineクエリでこれをどのように達成するのですか?

+0

DQLで左結合を実行する方法を見てみましょう。 – Cerad

答えて

0

クエリで'a'を取得するように指定する必要はありません。 HfLogを取得するだけです。 Then it's all about lazy loading

+0

「a」を取得しないとどういう意味ですか?それをselectメソッドから離しますか?私はleftJoinメソッドで気にする必要がありますか? – cj5

+0

クエリビルダーのselect()では、 'l'といくつかの場所(別名 'a')でHfLogを選択しています。あなたの選択リストを取得してください。あなたのHfLogsを取得してください。その後、HfLogsプロパティにアクセスすると、あなたのオブジェクトに直接利用可能な場所があります。 – MeuhMeuh

+0

私はクエリビルドの書き換えを私に提供できますか? – cj5

関連する問題