5

我有这个错误:

“注意:未定义的偏移量:C:\wamp\www\Videotheque\vendor\doctrine\lib\Doctrine\ORM\QueryBuilder.php 第 240 行中的 0”

我正在在线创建视频集。有 2 个实体:电影和流派。在我的 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);
}
4

3 回答 3

6

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

$this->createQueryBuilder('g')
于 2012-08-02T08:32:23.610 回答
1

我自己发现了这个问题并想发布我的解决方案。由于您是从 EntityManager 而不是 EntityRepository 创建 queryBuilder ,因此您需要一个 from 语句。当没有 from 语句或 from 语句出现故障时会出现错误(from 需要在任何 join 之前出现以使其满意)。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);
}
于 2014-10-24T19:53:42.673 回答
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);
}
于 2012-08-01T09:22:54.280 回答