2014-04-23 107 views
0

我想知道是否有一種方法可以使用2個ManyToMany關係從一個表中獲取記錄(這可能比較容易以一個示例來解釋)。學說ManyToMany - 加入多個關係

我有3個模型:文章,主題和類型,有一個關係ManyToMany之間的文章< - >主題和文章< - >類型和我正在尋找的是獲得分配文章的類型到某個主題。我希望這是有道理的。

下面你可以看到我的實體聲明:

class Article 
{ 
    /** 
    * @var topics 
    * 
    * @ORM\ManyToMany(targetEntity="Topic") 
    * @ORM\JoinTable(name="article_topic") 
    */ 
    protected $topics; 

    /** 
    * @var types 
    * 
    * @ORM\ManyToMany(targetEntity="Type", inversedBy="articles") 
    * @ORM\JoinTable(name="article_type") 
    */ 
    protected $types; 
} 

class Topic 
{ 
    /** 
    * @var Article 
    * 
    * @ORM\ManyToMany(targetEntity="Article") 
    */ 
    private $articles; 
} 

class Type 
{ 
    /** 
    * @var Article 
    * 
    * @ORM\ManyToMany(targetEntity="Article") 
    */ 
    private $articles; 
} 

現在在我的TypeRepository我有一個方法:(修訂版)

public function getByTopic($topic = null) 
{ 
    $qb = $this->getEntityManager()->createQueryBuilder() 
     ->select('t') 
     ->from('Type', 't'); 

    if ($topic) { 
     $subqb = $this->getEntityManager()->createQueryBuilder() 
      ->select('a.id') 
      ->from('Article', 'a') 
      ->innerJoin('a.topics', 'atop', 'WITH', 'atop.id = :topicId') 
     ; 
     $qb->innerJoin('t.articles', 'ta') 
      ->where($qb->expr()->in('ta.id', $subqb->getDql()) 
      ->setParameter('topicId', $topic->getId()); 
    } 

    return $qb->getQuery()->getResult(); 
} 

,我得到一個錯誤:無效PathExpression。 StateFieldPathExpression或SingleValuedAssociationField的預期(但它顯示了我從樹枝模板的行,我很努力達到此底部)。

的問題是如何獲得分配給屬於某個話題的文章類型。

任何建議表示讚賞。
謝謝。

回答

0

爲什麼不能做這樣的事情:

$qb = $this->getEntityManager()->createQueryBuilder('ty') 
         ->addSelect('ty'); 
if ($topic) { 
    $qb->join('ty.articles','a') 
    ->addSelect('a') 
    ->join('a.topics','to') 
    ->addSelect('to') 
    ->where('to.id=:topic_id') 
    ->setParameter('topic_id',$topic); 
} 
return $qb->getQuery()->getResult();