2013-04-28 113 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根本不同的范例,需要一些习惯。