Symfony2 - 注意:由于自定义查询,未定义的偏移量为0

时间:2012-08-01 09:02:01

标签: php doctrine-orm entity-relationship

我有这个错误:

  

“注意:未定义的偏移:0 in   C:\ WAMP \ WWW \ Videotheque \供应商\原则\ LIB \原则\ ORM \ QueryBuilder.php   第240行“

我正在线创建视频集。有两个实体:电影和流派。 在我的GenRerepository方法中,我尝试将函数findAll()重新定义为与一个类型相关的电影数量。

这是功能:

public function myFindAll()
{
    $genres = $this->_em->createQueryBuilder('g')
                        // leftJoin because I need all the genre
                        ->leftJoin('g.films', 'f')
                        ->addSelect('COUNT(f)')
                        ->groupBy('g')
                        ->getQuery()
                        ->getArrayResult();
    // $genres contains all the genres and the associated movies
    return ($genres);
}

3 个答案:

答案 0 :(得分:6)

Repository类提供了创建已为实体配置的QueryBuilder的方法,因此我们可以直接放置:

$this->createQueryBuilder('g')

答案 1 :(得分:0)

试试这个:

public function myFindAll()
{
    $qb = $this->_em->createQueryBuilder('g');
    $qb->leftJoin('g.films', 'f')
       ->select($qb->expr()->count('f')) // Use an expression
       ->groupBy('g.id')                 // Specify the field
    ;

    $genres = $qb->getQuery()->getArrayResult();

    // $genres contains all the genres and the associated movies
    return ($genres);
}

答案 2 :(得分:0)

我自己发现了这个问题,想发布我的解决方案。由于您要从EntityManager而不是EntityRepository创建queryBuilder,因此您需要一个from语句。如果没有from语句或者from语句乱序(在任何连接之前需要来自它以使其满意),则会出现错误。 EntityRepository在使用它时会为您解决这个问题。

public function myFindAll()
{
    $genres = $this->_em->createQueryBuilder('g')
                        //from statement here
                        ->from('GenreEntityClass', 'g')
                        // leftJoin because I need all the genre
                        ->leftJoin('g.films', 'f')
                        ->addSelect('COUNT(f)')
                        ->groupBy('g')
                        ->getQuery()
                        ->getArrayResult();
    // $genres contains all the genres and the associated movies
    return ($genres);
}