Symfony2 SymBlog教程:[语义错误]第0行,第15行附近'c.post =:post_id':错误:未定义类'c'。

时间:2015-03-09 15:42:11

标签: php symfony doctrine

我关注的是Symfony2博客tutorial part 4 当我试图查询帖子的评论时遇到了这个错误:

public function postAction($id) {
    $em = $this->getDoctrine()->getEntityManager();

    $post = $em->getRepository('BlogBundle:Post')->find($id);

    if (!$post) {
        throw $this->createNotFoundException('Unable to find Blog post.');
    }

    $comments = $em->createQueryBuilder('c')
            ->select('c')
            ->where('c.post = :post_id')
            ->addOrderBy('c.created')
            ->setParameter('postId', $id)
            ->getQuery()
            ->getResult();

    return $this->render('BlogBundle:Default:post.html.twig', array(
                'post' => $post,
                'comments' => $comments
    ));
}

我收到以下错误:

  

" [语义错误]第0行,第15行附近' c.post =:post_id':错误:   班级' c'未定义。"

3 个答案:

答案 0 :(得分:0)

您提供的教程链接对我不起作用,因此我无法看到您正在做的事情的背景但是......

createQueryBuilder()的参数是表的名称,因此您有一个名为' c'的表。这似乎是一张桌子的奇怪名称。

在您的查询中,您应该从表格中选择字段,而不是选择表格。

希望有所帮助,但如果你能提供一个有效的链接我可以更好地了解你想要实现的目标。

答案 1 :(得分:0)

您无法直接在EntityManager上调用createQueryBuilder,因为它不知道c是什么。这是因为您只需复制并粘贴没有上下文,并且在教程中的存储库类中调用了代码。不在控制器中。

试试这个

$comments = $em->getRepository('BlogBundle:Comment')->createQueryBuilder('c')
        ->select('c')
        ->where('c.post = :post_id')
        ->addOrderBy('c.created')
        ->setParameter('postId', $id)
        ->getQuery()
        ->getResult();

或者像在教程中一样,将注释添加到PostRepository中。

答案 2 :(得分:0)

您应该指定所需的实体:

$comments = $em->createQueryBuilder('c')

            ->from('BlogBundle:Comment', 'c') // I suppose your entity is Comment

            ->select('c')
            ->where('c.post = :post_id')
            ->addOrderBy('c.created')
            ->setParameter('postId', $id)
            ->getQuery()
            ->getResult();