2013-04-28 220 views
0

我有一個基於Doctrine 2.X ManyToMany關聯的問題。我的數據結構:ManyToMany關聯查詢

news: 
    id: INT 

program_site: 
    id: INT 

news_program_site: 
    newsId: INT 
    programSiteId: INT 

解壓出來我News.php的:

/** 
* @ORM\ManyToMany(targetEntity="ProgramSite") 
* @ORM\JoinTable(name="news_program_site", 
*  joinColumns={@ORM\JoinColumn(name="newsId", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="programSiteId", referencedColumnName="id")} 
* ) 
*/ 
private $programSites; 

我的問題: 是否有可能獲得其中有一個實體news_program_site使標識符X.所有新聞

例子:

SELECT * FROM news AS n INNER JOIN news_program_site AS s ON s.newsId = n.id WHERE s.programSiteId IN(2, 3) 

感謝您的幫助!

映入眼簾, 馬克

回答

0

你正在做的SQL。學說是不同的。您不直接與多對多表進行交互。學說處理。我想你想查詢的是:

$query = $em->createQuery("SELECT n FROM news n JOIN program_site ps"); 
$users = $query->getResult(); 

然後,你會處理消息的實體,並調用news.getProgramSite()用於與新聞實體相關聯ProgramSites的列表。您可以在查詢中添加一個where子句(例如,將新聞項目加入特定的程序),但根據您的描述,我認爲您不需要它。

這是一個與SQL根本不同的範例,需要一些習慣。