gpt4 book ai didi

php - Symfony,querybuilder,使用 pgsql 的扩展

转载 作者:行者123 更新时间:2023-11-29 12:45:53 42 4
gpt4 key购买 nike

我将 createQueryBuilderSymfonyPGSQL 一起使用。

我在我的数据库中安装了来自 PGSQL 的扩展 unaccent :

CREATE EXTENSION unaccent;

但是当我尝试这样的查询时:

                    $qb = $this->_em->createQueryBuilder();
$qb->select(array('a'))
->from('ProjectBundle:Account', 'a')
->where('unaccent(a.firstname) LIKE unaccent(?1) OR unaccent(a.lastname) LIKE unaccent(?1)')
->setParameters(array(1 => '%'.$search.'%'))
->setMaxResults(5);
return $qb->getQuery()->getResult();

我有这个错误:错误:预期的已知函数,没有重音

我如何在 Symfony 和 Doctrine 中使用这个扩展?

最佳答案

您可以创建自己的 DQL 函数来支持 Unaccent :

namespace Your\Namepsace\Doctrine\DQL;

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

/**
* Unaccent string using postgresql extension unaccent :
* http://www.postgresql.org/docs/current/static/unaccent.html
*
* Usage : StringFunction UNACCENT(string)
*
*/
class Unaccent extends FunctionNode
{
private $string;

public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
{
return 'UNACCENT(' . $this->string->dispatch($sqlWalker) .")";
}

public function parse(\Doctrine\ORM\Query\Parser $parser)
{
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);

$this->string = $parser->StringPrimary();

$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}

}

你必须在 Doctrine 配置中注册它

使用 Symfony

根据to the doc here :

# app/config/config.yml
doctrine:
orm:
# ...
dql:
string_functions:
unaccent: Your\Namespace\Doctrine\DQL\Unaccent

我们也喜欢在捆绑配置中自动执行,see an example .

独立 Doctrine :

根据to the doctrine documentation (未测试):

$config = new \Doctrine\ORM\Configuration();
$config->addCustomStringFunction('unaccent', 'Your\Namespace\Doctrine\DQL\Unaccent');

关于php - Symfony,querybuilder,使用 pgsql 的扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23227177/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com