Symfony2&学说:由外来属性引起的命令

时间:2012-10-15 09:42:48

标签: mysql sql symfony doctrine

我想使用select来获取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以某种方式创建一个包含其结果的实体对象。
  3. 任何提示?感谢。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

这里回答了类似的问题:Doctrine 2: How to search for an entity by its association's value?