2015-05-05 18 views
6

Bende: var.Doktrin İlişkilendirme olmadan birçok kişiye katılın Bir çok kişiden çok olmayan M: M ilişkilendirmesi olan

class ShareInfo 
{ 
    // ... 

    /** 
    * @ORM\ManyToMany(targetEntity="Item") 
    * @ORM\JoinTable(name="share_info_items", 
    *  joinColumns={@ORM\JoinColumn(name="share_id", referencedColumnName="id")}, 
    *  inverseJoinColumns={@ORM\JoinColumn(name="item_id", referencedColumnName="id")}) 
    * 
    * @var Item[] 
    */ 
    private $items; 
} 

class Item 
{ 
    // ... 

    // This entity has no association with ShareInfo, 
    // because M:M is undirectional and defined in ShareInfo entity 
} 

Benim istediğim: Item ve ShareInfo arasındaki M rekor var: En az bir M ürün masanın (Öğe varlık), dan seçin verileri.

(ı anlam hatası var) çalışmıyor Benim önerim:

$queryBuilder 
    ->select('i') 
    ->from(Item::class, 'i') 
    ->innerJoin(ShareInfo::class, 'shareInfo', 'WITH', 'shareInfo.items = i'); 

saf SQL böyle bir şey yapacağını:

SELECT i.* 
FROM items i 
INNER JOIN share_info_items shareInfo 
    ON shareInfo.item_id = i.id 

Can' Bunun için DQL analogu olmadığına inanıyoruz. Hayal edebileceğim tek çözüm iki yönlü M: M ilişkisini çift yönlü

P.S.'ye bölmektir. Bu sorunun kopyaları yok, iyi kontrol ettim.

+0

bu soruna bir çözüm buldunuz mu? – semsem

+1

@semsem Dürüst olmayı hatırlamıyorum. Ama şimdi bir ara tablo ile MtM ilişkisi kullanacağım. Bkz. Https://stackoverflow.com/questions/15616157/doctrine-2-and-many-to-many-link-table-with-an-extra-field/15630665#15630665 Tek bir çözüm bulunmadığı anlaşılıyor. yönlü ilişki. – Hast

cevap

-1

bunu başarmak için bir yol, bir alt sorgu geçer:

$em=$this->getDoctrine()->getManager(); 
$queryBuilder1=$em->createQueryBuilder(); 
$queryBuilder1->select(array('DISTINCT i.id')) 
      ->from('AppBundle:ShareInfo', 'share_info') 
      ->innerJoin('share_info.items', 'i'); 
$queryBuilder=$em->createQueryBuilder(); 
$queryBuilder->select('i') 
     ->from('AppBundle:items', 'i') 
     ->where($queryBuilder->expr() 
     ->in('i.id',$queryBuilder1->getDql())); 
İlgili konular