我有一个基于Doctrine 2.X 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 :(得分:0)
你正在做SQL。学说不同。您不直接与多对多表交互。学说处理这个问题。我认为你想要的查询是:
$query = $em->createQuery("SELECT n FROM news n JOIN program_site ps");
$users = $query->getResult();
然后,您将新闻作为实体处理,并调用news.getProgramSite()以获取与新闻实体关联的ProgramSites列表。您可以在查询中添加where子句(例如,将新闻项目添加到特定的程序中),但根据您的描述,我认为您不需要它。
这是一个与SQL完全不同的范例,需要一些时间来习惯。