我试图将查询移到自定义存储库类中。这是我到目前为止所做的事情
class MovieRepository extends EntityRepository
{
public function showMovie($movie)
{
$em = $this->getEntityManager();
$qb = $em->createQueryBuilder('m');
$query = $qb->select('m.title', 'm.img', 'u.username')
->where('m.title = :movie')
->leftJoin('m.user', 'u')
->setParameter('movie', $movie)
->getQuery();
return $query->getSingleResult();
}
}
我在我的控制器中使用它:
$em = $this->getDoctrine()->getManager();
$result = $em->getRepository('AMovieBundle:Movie')->showMovie($movie);
我确实在我的实体中放置了@ORM \ Entity(repositoryClass =" A \ MovieBundle \ Entity \ MovieRepository"),命名空间和文件夹是正确的,我从电影到用户的关系是当我在控制器中进行查询时,此操作正确。
我一直遇到的主要错误是:
注意:未定义的偏移量:/Applications/MAMP/htdocs/symfony2test/vendor/doctrine/orm/lib/Doctrine/ORM/QueryBuilder.php第271行
查询构建器中的第271行是:
public function getRootAlias()
{
$aliases = $this->getRootAliases();
return $aliases[0];
}
我不知道从哪里开始,任何帮助将不胜感激。
答案 0 :(得分:3)
快速提示,函数getRootAlias()
返回为查询创建的别名,在您的情况下为“m”。
如果我做了一个有根据的猜测,我会尝试这个(注意选择语法):
$query = $qb->select('m.title, m.img, u.username')
->where('m.title = :movie')
->leftJoin('m.user', 'u')
->setParameter('movie', $movie)
->getQuery();
您已经在EntityRepository中,您无需致电$this->getEntityManager()
。
只是做:
$qb = $this->createQueryBuilder('m');
那应该解决你的问题。