我正试图将查询移动到自定义存储库类中。以下是到目前为止我得到的
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/domaine/orm/lib/doctrine/OM/QueryBuilder.php行271 中的0
查询生成器中的第271行是这样的:
public function getRootAlias()
{
$aliases = $this->getRootAliases();
return $aliases[0];
}
我不知道从这里到哪里去,任何帮助都将不胜感激。
快速提示,函数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');
这应该能解决你的问题。