我试图在 Doctrine Query Builder 中创建我的旧 mysql 查询之一,但我收到错误 Error: Expected known function, got 'SEC_TO_TIME'
所以我猜测该 Doctrine 不喜欢 mysql 函数 SEC_TO_TIME 但它似乎喜欢 AVG、COUNT 等。有没有什么方法可以使用 Doctrine_RawSQL 类让查询构建器运行查询?
谢谢
最佳答案
我知道这个问题很老了,但我正在为其他有同样错误的人回答这个问题。
您只需要以文件形式添加以下代码,名称为“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 文件中添加以上文件名以便进一步使用它。我希望你知道如何添加它。
如果您有任何疑问,请随时提问。
关于php - Doctrine 查询生成器 mysql 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6046155/