我有这个错误:
“注意:未定义的偏移: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);
}
答案 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);
}