难以接受错误,无法弄清楚如何解决此问题。
这是我的错误:
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>
答案 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
)没有标题。