Symfony2 - Doctrine DQL - 多对多查询
Symfony2 - Doctrine DQL - many to many query
我有实体 Offer
和 Area
,这里一个 Offer
可以有多个 Areas
,一个 Area
属于多个 Offers
:
Offer
实体:
/**
* @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
获取 Offers
:
$query = 'SELECT o FROM IndexBundle:Offer o '.
'LEFT JOIN IndexBundle:Area a '.
'WHERE a = :area '.
'ORDER BY o.startDate ASC';
这里:area
是Area
实体对象。不幸的是,它没有按预期工作。我得到了所有区域的所有报价行。
知道我错过了什么吗?在查询语言中使用实体真的让我大吃一惊。谢谢!
$query = 'SELECT o FROM IndexBundle:Offer o '.
'LEFT JOIN o.areas a '.
'WHERE a.id = :areaId '.
'ORDER BY o.startDate ASC';
它不知道如何即时使用 JOIN
。使用实体的属性进行加入。这就像您在 SQL 中执行 LEFT JOIN
一样,因为您指的是要从中获取更多数据的列。正如您在联接的 ON
中指定的那样。
Left join using DQL - See documentation: Doctrine DQL - Select examples
$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
我有实体 Offer
和 Area
,这里一个 Offer
可以有多个 Areas
,一个 Area
属于多个 Offers
:
Offer
实体:
/**
* @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
获取 Offers
:
$query = 'SELECT o FROM IndexBundle:Offer o '.
'LEFT JOIN IndexBundle:Area a '.
'WHERE a = :area '.
'ORDER BY o.startDate ASC';
这里:area
是Area
实体对象。不幸的是,它没有按预期工作。我得到了所有区域的所有报价行。
知道我错过了什么吗?在查询语言中使用实体真的让我大吃一惊。谢谢!
$query = 'SELECT o FROM IndexBundle:Offer o '.
'LEFT JOIN o.areas a '.
'WHERE a.id = :areaId '.
'ORDER BY o.startDate ASC';
它不知道如何即时使用 JOIN
。使用实体的属性进行加入。这就像您在 SQL 中执行 LEFT JOIN
一样,因为您指的是要从中获取更多数据的列。正如您在联接的 ON
中指定的那样。
Left join using DQL - See documentation: Doctrine DQL - Select examples
$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