Symfony2-原则DQL-多对多查询

Symfony2-原则DQL-多对多查询,symfony,doctrine-orm,doctrine,many-to-many,dql,Symfony,Doctrine Orm,Doctrine,Many To Many,Dql,我有实体提供和区域,这里一个提供可以有多个区域,一个区域属于多个提供: 报价实体: /** * @ORM\ManyToMany(targetEntity="Area") * @ORM\JoinTable(name="relationship_offer_areas", * joinColumns={@ORM\JoinColumn(name="offer_id", referencedColumnName="id", onDelete="CASCADE")}, * in

我有实体
提供
区域
,这里一个
提供
可以有多个
区域
,一个
区域
属于多个
提供

报价
实体:

/**
 * @ORM\ManyToMany(targetEntity="Area")
 * @ORM\JoinTable(name="relationship_offer_areas",
 *      joinColumns={@ORM\JoinColumn(name="offer_id", referencedColumnName="id", onDelete="CASCADE")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="area_id", referencedColumnName="id")}
 *      )
 */
private $areas;
现在,我正试图通过使用DQL(不是查询生成器!)通过
Area
获取
报价:

此处
:区域
区域
实体对象。不幸的是,它没有按预期工作。我得到所有区域的所有报价行

你知道我遗漏了什么吗?用查询语言处理实体真的让我心烦意乱。谢谢大家!

$query = 'SELECT o FROM IndexBundle:Offer o '.
'LEFT JOIN o.areas a '.
'WHERE a.id = :areaId '.
'ORDER BY o.startDate ASC';
它不知道如何动态地使用
JOIN
。使用实体的属性进行连接。这就像您在SQL中执行
左联接
,因为您要从中引用附加数据。如您在联接的
上的中所指定

使用DQL左连接-请参阅文档:

$query = 'SELECT o FROM IndexBundle:Offer o '.
'LEFT JOIN o.areas a '.
'WHERE a.id = :areaId '.
'ORDER BY o.startDate ASC';
$query = $em->createQuery('SELECT u.id, a.id as article_id FROM CmsUser u LEFT JOIN u.articles a');
$results = $query->getResult(); // array of user ids and every article_id for each user