学说:按相关实体的顺序排序

时间:2015-05-31 13:42:14

标签: symfony doctrine-orm

目标:对我的实体进行排序,了解它们如何用于关联关系(oneToMany)

问题: DQL,它以某种方式处理FROM关键字是一个实体或类。

抛出异常::QueryException:[语义错误]第0行col 103'FROM MyBundle附近:实体错误:类'FROM'未定义。

这是我编写的一个SQL查询,用于测试如何获取数据。它完美地运作

SELECT en.id, (COUNT(DISTINCT ag.artist_id) + COUNT(DISTINCT rg.release_id) + COUNT(DISTINCT tg.track_id)) AS total

FROM myapp.entity AS en

LEFT JOIN myapp.other_one AS o1 ON o1.entity_id = en.id
LEFT JOIN myapp.other_two AS o2 ON o2.entity_id = en.id

GROUP BY en.id

ORDER BY total DESC ;

为了使symfony中的数据能够水合到对象,我尝试在EntityRepository中使用Doctrine Query Language,如下所示:

/**
 * Find Most Common Entities
 * 
 * @return array
 */
public function findMostCommon()
{
    $em = $this->getEntityManager();
    $qb = $em->createQueryBuilder();

    $qb
        ->select('en, (COUNT(DISTINCT en.other1) + COUNT(DISTINCT en.other2)) AS count')
        ->from('MarulaBundle:Entity', 'en')
        ->leftJoin('MyBundle:Other1', 'o1', 'WITH', 'o1.entity = en.id')
        ->leftJoin('MyBundle:Other2', 'o2', 'WITH', 'o2.entity = en.id')
        ->groupBy('en')
        ->orderBy('count', 'DESC')
    ;

    return $qb->getQuery()->getResult();
}

因为它可以在SQL查询中使用。我希望它能与DQL一样好用。

之前有没有人遇到此错误?甚至可以用Doctrine实现这一点,还是关于这个问题的学说有限?

1 个答案:

答案 0 :(得分:1)

OOPS:我不应该使用关键字“count”

<强>解决方案:

->select('en, (COUNT(DISTINCT en.other1) + COUNT(DISTINCT en.other2)) AS HIDDEN orderCount')

注意:添加HIDDEN关键字有助于仅返回实体,这使得水合适合