【问题标题】:Postgres full text search DQL user defined function problemsPostgres全文搜索DQL用户定义函数问题
【发布时间】:2013-02-11 18:24:21
【问题描述】:
/**
 * PGSearchFunction ::= "PG_SEARCH" "(" StateFieldPathExpression "," StringPrimary ")"
 */
class PGSearch extends FunctionNode
{
    public $searchColumn = null;
    public $search = null;

    public function parse(Parser $parser)
    {
        $parser->match(Lexer::T_IDENTIFIER);
        $parser->match(Lexer::T_OPEN_PARENTHESIS);
        $this->searchColumn = $parser->StateFieldPathExpression();
        $parser->match(Lexer::T_COMMA);
        $this->search = $parser->StringPrimary(); 
        $parser->match(Lexer::T_CLOSE_PARENTHESIS);
    }

    public function getSql(SqlWalker $sqlWalker)
    {
        return sprintf("%s @@ to_tsquery('english', %s)", $this->searchColumn->dispatch($sqlWalker), $this->search->dispatch($sqlWalker));

    }

}

[语法错误] line 0, col -1: Error: Expected =, , >, >=, !=, got end of string。关于如何防止学说将其视为标准 SQL 表达式的任何建议?顺便说一句,使用学说 2.2。

【问题讨论】:

  • 您在 DQL 中将什么传递给 PG_SEARCH 函数?
  • $em->createQuery("SELECT i FROM MyBundle:Invoice i WHERE PG_SEARCH(i.search, 'virus')");
  • 你可以试试$em->createQuery("SELECT i FROM MyBundle:Invoice i WHERE PG_SEARCH(i.search, 'virus') = true");
  • 那行得通,希望有一个更清洁的解决方案,但那会奏效。谢谢你好先生。
  • 是的,不幸的是,Doctrine 对此类功能的支持似乎不存在。

标签: php postgresql symfony doctrine-orm full-text-search


【解决方案1】:

你应该可以做到$em->createQuery("SELECT i FROM MyBundle:Invoice i WHERE PG_SEARCH(i.search, 'virus') = true");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    相关资源
    最近更新 更多