0

我正在尝试将我的查询移动到自定义存储库类中。这是我到目前为止所得到的

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 行中的 0

查询生成器中的第 271 行是这样的:

public function getRootAlias()
{
    $aliases = $this->getRootAliases();
    return $aliases[0];
}

我不知道从这里去哪里,任何帮助将不胜感激。

4

1 回答 1

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');

那应该可以解决您的问题。

于 2013-06-27T12:12:54.560 回答