我得到一个奇怪的错误,当我执行此DQL查询:
SELECT u FROM User u LEFT JOIN u.schedule s WHERE DATE(s.timestamp) = DATE(NOW())
唯一的例外是抛出学说与消息:
Expected known function, got 'DATE'
这个问题类似于此的错误 ,但解决了date()函数在GROUP BY子句和错误被关闭学说2.2。 在这个时刻,我与学说2.4-DEV例外。
查询是为了选择原定于今天的所有用户。 有没有什么办法可以创建此DQL? 我在phpMyAdmin测试的SQL版本有查询没有引发错误。 可能是什么问题?
你可以实现你用想要的自定义函数 :
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
use Doctrine\ORM\Query\Lexer;
use Doctrine\ORM\Query\SqlWalker;
use Doctrine\ORM\Query\Parser;
class DateFunction extends FunctionNode
{
private $arg;
public function getSql(SqlWalker $sqlWalker)
{
return sprintf('DATE(%s)', $this->arg->dispatch($sqlWalker));
}
public function parse(Parser $parser)
{
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->arg = $parser->ArithmeticPrimary();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
}
然后登记在你的代码这样的功能:
$em->getConfiguration()->addCustomDatetimeFunction('DATE', 'DateFunction');
和您的DQL的查询将工作!