首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原则查询生成器mysql函数

问原则查询生成器mysql函数
EN

Stack Overflow用户
提问于 2011-05-18 14:13:04
回答 2查看 4.7K关注 0票数 7

我很想在Doctrine中创建一个以前的mysql查询,但是我返回了一个错误错误:预期的已知函数,got 'SEC_TO_TIME'

因此,我猜想这个原则不喜欢mysql函数SEC_TO_TIME,但是它似乎确实喜欢AVG、COUNT等等。除了使用Doctrine_RawSQL类使查询生成器运行查询之外,还有其他方法吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-16 11:42:07

这些AVG和Count是DQL聚合函数,它们与SQL无关。因此,除了RawSQL之外,没有办法从DQL调用UDF

但是,如果您使用的是doctrine2,您可能想看看将自己的函数添加到DQL语言中和在原则2中扩展DQL :用户定义的函数。

票数 2
EN

Stack Overflow用户

发布于 2019-01-09 13:53:14

我知道这个问题很老,但我是在为有同样错误的人回答这个问题。

您只需将下面的代码以名为"SecToTime.php“的文件形式添加到下面的路径中。

YourProjectName\libraries\Doctrine\DoctrineExtensions\Query\MySql\SecToTime.php

并将下面的代码放入上述名为"SecToTime.php“的文件中。

代码语言:javascript
复制
<?php

namespace DoctrineExtensions\Query\Mysql;

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

class SecToTime extends FunctionNode {

    public $time;

    /**
     * @override
     */
    public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) {
        return 'SEC_TO_TIME(' . $sqlWalker->walkArithmeticPrimary($this->time) . ')';
    }

    /**
     * @override
     */
    public function parse(\Doctrine\ORM\Query\Parser $parser) {
        $parser->match(Lexer::T_IDENTIFIER);
        $parser->match(Lexer::T_OPEN_PARENTHESIS);
        $this->time = $parser->ArithmeticPrimary();
        $parser->match(Lexer::T_CLOSE_PARENTHESIS);
    }

}

您需要在您的doctrine.php文件中添加上面的文件名,以便进一步使用它。我希望你知道怎么加。

如果您有任何疑问,请随时询问。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6046155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档