9

嘿,我正在写这篇文章,因为我在教义查询中传递数组值时遇到了一些问题。

这是整个查询,因为它是:

$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']}' 工作但它没有。

4

1 回答 1

22

从你的代码片段我可以看出,你正在寻找这样的东西:

$entityManager->getRepository('PfBlogBundle:Article')
              ->findBy(
                   array(
                      'key' => 'value'
                   )
               );

其中 key 是属性/字段,而 value 是要查找的值。检查 Symfony 手册页。您所追求的是Fetching Objects from the Database
like在 where 子句中使用 a,请参阅这个 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));
}

但这只是一个粗略的修复,谷歌学说-symfony 分页,有很多关于此事的详细博客文章

于 2013-09-05T10:47:19.423 回答