Doctrine and Symfony2: WHERE a.title LIKE $array
Posted
技术标签:
【中文标题】Doctrine and Symfony2: WHERE a.title LIKE $array【英文标题】: 【发布时间】:2013-09-09 03:40:07 【问题描述】:嘿,我写这篇文章是因为我在教义查询中传递数组值时遇到了一些问题。
这是整个查询的原样:
$data = $request->request->all();
$dql = "SELECT a FROM PfBlogBundle:Article a WHERE a.title LIKE '$data['search']' ORDER by a.id DESC";
如果我 print_r($data) 我得到了值,所以它就在某个地方。我只是不明白为什么它没有在查询中传递.. 期待 LIKE '$data['search']' 工作但它没有。
【问题讨论】:
Doctrine 2 Query with LIKE 的可能重复项 【参考方案1】:从你的 sn-p 可以看出,你正在寻找这样的东西:
$entityManager->getRepository('PfBlogBundle:Article')
->findBy(
array(
'key' => 'value'
)
);
其中键是属性/字段,值是要查找的值。检查 Symfony 手册页。你所追求的是Fetching Objects from the Database。
在 where 子句中使用 like
,refer to this SO question,了解如何使用 setParameter
。你会得到你的查询:
$repo = $entityManager->getRepository('PfBlogBundle:Article');
$query = $repo->createQueryBuilder('a')
->where('a.title LIKE :title')
->setParameter('title', '%'.$data['search'].'%')
->getQuery();
当然,添加通配符以满足您的需求。我已将$data['search']
值包含在两个%
通配符中,这很慢,但话又说回来:我不知道您实际上在做什么。可能您所追求的只是LIKE
不区分大小写的性质,在这种情况下,%
可以一起省略...
根据您之前的问题(顺便说一句:考虑偶尔接受一个答案):
public function searchAction(Request $request)
$data = $request->get->all();
$repo = $this->getDoctrine()
->getRepository('PfBlogBundle:Article');
$query = $repo->createQueryBuilder('a')
->where('a.title LIKE :title')
->setParameter('title', '%'.$data['search'].'%')
->getQuery();
$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate(
$query->getResults(),//get the results here
$this->requrest->get('page',1),
4
);
return $this->render('PfBlogBundle:Default:blog.html.twig', array('pagination'=>$pagination));
但这只是一个粗略的修复,Google doctrine-symfony pagination,有很多关于此事的详细博客文章
【讨论】:
感谢您的回复。我还在学习它,我能说的越少,这不是一件容易的事!希望我能得到它!再次感谢,那我就试试这种方式…… @user1880789:很高兴看到您感谢我的努力。不要采取错误的方式,但the SO way of saying thanks is not by commenting, but by accepting 会回答。其实you're asked not to comment with "thanks",查看帮助页面底部以上是关于Doctrine and Symfony2: WHERE a.title LIKE $array的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Doctrine2 (Symfony2) 中按案例排序