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的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 和 Doctrine:一对多关系

如何在 Doctrine2 (Symfony2) 中按案例排序

Symfony2 & Doctrine:创建自定义 SQL 查询

Symfony2/Doctrine 提交表单需要很长时间

Symfony2 Doctrine2 获取所有表

Symfony2/Doctrine - 与普通 SQL 相关的实体抽象