当前位置: 首页 > 面试题库 >

原则查询-忽略空格

刁俊人
2023-03-14
问题内容

我正在寻找一种创建忽略空格的学说查询的方法。我尝试用replace,但是我一直都收到

预期的已知功能,得到“替换”

我的查询看起来像:

        $query = $em->createQueryBuilder();

        $query->select('c')
                ->from('ACME\UserBudnle\Entity\User', 'c')
                ->where('replace(c.username," ","")'.' LIKE :searchName')
                ->setParameter('searchName', '%@' . $searchName. '%')
                ->orderBy('c.username', 'asc');

问题答案:

好的,我编写了一个替换DQL函数。

<?php

namespace Acme\UserBundle\DQL;

use Doctrine\ORM\Query\Lexer; 
use Doctrine\ORM\Query\AST\Functions\FunctionNode;


/**
 * "REPLACE" "(" StringPrimary "," StringSecondary "," StringThird ")"
 */
class replaceFunction extends FunctionNode{

    public $stringFirst; 
    public $stringSecond; 
    public $stringThird;


    public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) {
        return  'replace('.$this->stringFirst->dispatch($sqlWalker) .','
                . $this->stringSecond->dispatch($sqlWalker) . ',' 
                .$this->stringThird->dispatch($sqlWalker) . ')';
    }

    public function parse(\Doctrine\ORM\Query\Parser $parser) {

        $parser->match(Lexer::T_IDENTIFIER);
        $parser->match(Lexer::T_OPEN_PARENTHESIS);
        $this->stringFirst = $parser->StringPrimary();
        $parser->match(Lexer::T_COMMA);
        $this->stringSecond = $parser->StringPrimary();
        $parser->match(Lexer::T_COMMA);
        $this->stringThird = $parser->StringPrimary();
        $parser->match(Lexer::T_CLOSE_PARENTHESIS);
    }

}

接下来在app / config.yml中,我添加:

doctrine:
    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        auto_mapping: true
        dql:
            string_functions:
                replace: Acme\UserBundle\DQL\replaceFunction

最后,我在控制器中创建了一个DQL查询:

$em = $this->getDoctrine()->getManager();

    $query = $em->createQueryBuilder();

    $query->select('u')
            ->from('Acme\UserBundle\Entity\User', 'u')

            ->where("replace(u.username,' ','') LIKE replace(:username,' ','') ")
            ->setParameter('username', '%' . $usernameForm . '%')
            ->orderBy('u.username', 'asc');


    $result = $query->getQuery()->getResult();

最有趣的是,“引号”非常重要。这意味着您可以在select,from,setParameter和orderB中看到,我使用’‘,但在其中使用“”和space”。相反的是行不通的。我不知道为什么。



 类似资料:
  • 问题内容: 什么是运行查询以便忽略字段中的空格的最佳方法?例如,以下查询: 将找到以下条目: 我正在使用php或python,但我认为这没有关系。 问题答案:

  • 和使用它的字段: 当使用Solr分析工具时,一切看起来都很好。 查询部分如下: null null

  • 我有一个简单的MySQL数据库,我正在从PHP查询它。我让用户通过表单输入一些约束,然后希望根据约束返回SELECT查询的结果。当两个约束都被使用时,我所做的就是工作。但是,如果用户没有指定其中一个约束,SELECT查询将不返回任何结果,我认为这是因为它将约束变量视为空。 如果SELECT查询不是空的,如何让它使用约束,如果是空的,如何让它忽略约束? 这是我之前试过的,但不起作用。我想我可以测试它

  • 这个问题已经问过了:Spring data-ignore参数,如果它有一个空值和一个创建的票证,datajpa-209。 只要这个问题是近3年前的问题,而且票证可以追溯到2012年,我就想问是否有一种更舒适和通用的方法来避免处理和复制存储库方法的开销。2个这样的参数的解决方案看起来是可以接受的,但是我想实现4-5个参数的非常相同的过滤。

  • Spring Hateoas没有为以下请求映射创建适当的链接: 致电/会员/12345时,您希望返回: 但相反,它返回: 这是为什么?即使我使用@Request estParam,它也完全忽略了过滤器。在这件事上,任何建议都将受到赞赏。

  • 查询条件: {a:1,b:undefined}, {a:1,b:null}, mongodb查询,会忽略上述b字段吗?