3

我想使用一个选择来获取带有 Doctrines QueryBuilder 的实体数组。但我需要一个ORDER BY使用外部属性(与外键相关的表中的属性)。我想直观地写的是这样的:

$repo = $this->getDoctrine()->getRepository('MyBundle:relation_table');

$query = $repo->createQueryBuilder('r')
 ->orderBy('r.fevent.date', 'DESC')
 ->getQuery();

毫不奇怪,这不起作用。在 SQL 中,我SELECT看起来像这样:

SELECT r.* FROM relation_table AS r
INNER JOIN events AS e
    ON e.IDevent = r.Fevent
ORDER BY e.date

但我也需要 Doctrine 把实体对象还给我。我想到了两种可能的解决方案:

  1. 使用 QueryBuilder 创建一个INNER JOIN, 或
  2. 创建一个与上面相同的自由 SQL 语句,并以某种方式告诉 Doctrine 创建一个带有其结果的实体对象。

有什么提示吗?谢谢。

4

2 回答 2

2

您需要加入要订购的实体:

$query = $repo->createQueryBuilder('r')
    ->join('r.fevent', 'f')
    ->orderBy('f.date', 'DESC')
    ->getQuery()
;
于 2012-10-15T12:34:55.770 回答
0

在您的 Doctrine Query(您提出的第一个解决方案)中加入这两个表非常简单。看看这里:http ://symfony.com/doc/2.0/book/doctrine.html#joining-to-related-records

这里回答了一个类似的问题:学说 2:如何通过关联值搜索实体?

于 2012-10-15T09:59:52.613 回答