gpt4 book ai didi

doctrine - 在带有 DQL 的 WHERE 子句中使用 DATE() 函数

转载 作者:行者123 更新时间:2023-12-02 13:47:04 25 4
gpt4 key购买 nike

执行此 DQL 查询时出现奇怪的错误:

SELECT u FROM User u LEFT JOIN u.schedule s WHERE DATE(s.timestamp) = DATE(NOW())

Doctrine 抛出异常并显示以下消息:

Expected known function, got 'DATE'

该问题看起来类似于 this bug ,但这解决了 GROUP BY 子句中的 DATE() 函数,并且 Doctrine 2.2 中的错误已关闭。此时,我得到了 2.4-DEV Doctrine 的异常(exception)。

该查询旨在选择今天安排的所有用户。有什么方法可以创建这个 DQL 吗?我在 phpMyAdmin 中测试了 SQL 版本,查询不会引发错误。可能出了什么问题?

最佳答案

您可以通过使用 custom function 来实现您想要的目标:

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 查询将会正常工作!

关于doctrine - 在带有 DQL 的 WHERE 子句中使用 DATE() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13272224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com