Symfony2 - Querybuilder错误 - 在非对象上调用成员函数getTitle()

时间:2014-07-24 07:52:57

标签: symfony doctrine-orm query-builder

难以接受错误,无法弄清楚如何解决此问题。

这是我的错误:

FatalErrorException: Error: Call to a member function getTitle() on a non-object in /.../Entity/BlogRepository.php line 31

第31行:->setParameter('categoryTitle', $category->getTitle())

我可以获得一些关于查询错误的帮助吗? (应按类别获取帖子)

查询

public function getBlogsByCategory($category)
{
    return $this->createQueryBuilder('blog')
        ->where('blog.category = :categoryTitle')
        ->setParameter('categoryTitle', $category->getTitle())
        ->orderBy('blog.created', 'DESC')
        ->getQuery()
        ->getResult();
}

控制器

/**
 * @Route("/category/{category}", name="AcmeDemoBundle_category")
 * @Method({"GET"})
 * @Template("AcmeDemoBundle:Page:category.html.twig")
 */
public function categoryAction($category = null)
{
    $em = $this->getDoctrine()->getManager();

    $blogs = $em->getRepository('AcmeDemoBundle:Blog')
        ->getBlogsByCategory($category);

    if (!$blogs) {
        throw $this->createNotFoundException('Unable to find blog posts');
    }

    return array(
        'blogs'    => $blogs,
    );
}

枝条

<li id="" class=""><a href="{{ path('AcmeDemoBundle_category', 
{ 'category': 'Category1' }) }}">Category 1</a></li>

2 个答案:

答案 0 :(得分:1)

您正在创建带有类别标题的链接,因此您在控制器中获得了一个字符串而不是Category对象。将您的操作更改为以下内容:

/**
 * @Route("/category/{categoryTitle}", name="AcmeDemoBundle_category")
 * @Method({"GET"})
 * @Template("AcmeDemoBundle:Page:category.html.twig")
 */
public function categoryAction($categoryTitle)
{
    $em = $this->getDoctrine()->getManager();

    $blogs = $em->getRepository('AcmeDemoBundle:Blog')
        ->getBlogsByCategoryTitle($categoryTitle);

    if (!$blogs) {
        throw $this->createNotFoundException('Unable to find blog posts');
    }

    return array(
        'blogs'    => $blogs,
    );
}

和存储库:

public function getBlogsByCategoryTitle($categoryTitle)
{
    return $this->createQueryBuilder('blog')
        ->leftJoin('blog.category','category')
        ->where('category.title = :categoryTitle')
        ->setParameter('categoryTitle', $categoryTitle)
        ->orderBy('blog.created', 'DESC')
        ->getQuery()
        ->getResult();
}

和Twig:

<li id="" class=""><a href="{{ path('AcmeDemoBundle_category', 
{ 'categoryTitle': 'Category1' }) }}">Category 1</a></li>

答案 1 :(得分:1)

您的操作默认并允许类别为null

您的存储库还允许类别为null,因为它没有类型提示集。

这意味着即使没有提供类别,也可以调用您的操作和存储库,这意味着您的类别(null)没有标题。