我很想在Doctrine中创建一个以前的mysql查询,但是我返回了一个错误错误:预期的已知函数,got 'SEC_TO_TIME'
因此,我猜想这个原则不喜欢mysql函数SEC_TO_TIME,但是它似乎确实喜欢AVG、COUNT等等。除了使用Doctrine_RawSQL类使查询生成器运行查询之外,还有其他方法吗?
谢谢
发布于 2011-08-16 11:42:07
这些AVG和Count是DQL聚合函数,它们与SQL无关。因此,除了RawSQL之外,没有办法从DQL调用UDF
但是,如果您使用的是doctrine2,您可能想看看将自己的函数添加到DQL语言中和在原则2中扩展DQL :用户定义的函数。
发布于 2019-01-09 13:53:14
我知道这个问题很老,但我是在为有同样错误的人回答这个问题。
您只需将下面的代码以名为"SecToTime.php“的文件形式添加到下面的路径中。
YourProjectName\libraries\Doctrine\DoctrineExtensions\Query\MySql\SecToTime.php
并将下面的代码放入上述名为"SecToTime.php“的文件中。
<?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文件中添加上面的文件名,以便进一步使用它。我希望你知道怎么加。
如果您有任何疑问,请随时询问。
https://stackoverflow.com/questions/6046155
复制相似问题