在 Zend Framework 2 项目中将 "DATE()" 添加到 Doctrine2 SQL
Add "DATE()" to Doctrine2 SQL in Zend Framework 2 Project
我希望在我的 ZF2 应用程序中将 MySQL 的 DATE 添加到我的 Doctrine 设置中。我已经完成了文档要求的必要操作:
在我模块的 onMergeConfig
$config['doctrine']['connection']['orm_default']['datetime_functions'] = [
'date' => 'Erudite\Doctrine\DQL\Date',
]
// ...
$configListener->setMergedConfig($config);
...我也尝试通过 module.config.php
配置,同样的交易...
我添加了这样的日期:
namespace Erudite\Doctrine\DQL;
use Doctrine\ORM\Query\Lexer;
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
class Date extends FunctionNode
{
public $date;
public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
{
return "DATE(" . $sqlWalker->walkArithmeticPrimary($this->date) . ")";
}
public function parse(\Doctrine\ORM\Query\Parser $parser)
{
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->date = $parser->ArithmeticPrimary();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
}
不幸的是,这导致了这个错误:
An abstract factory could not create an instance of doctrine.entitymanager.ormdefault(alias: doctrine.entitymanager.orm_default).
有什么想法吗?
您的自定义函数的正确配置键应该是
$config['doctrine']['configuration']['orm_default']['datetime_functions']
(configuration
而不是 connection
)
我希望在我的 ZF2 应用程序中将 MySQL 的 DATE 添加到我的 Doctrine 设置中。我已经完成了文档要求的必要操作:
在我模块的 onMergeConfig
$config['doctrine']['connection']['orm_default']['datetime_functions'] = [
'date' => 'Erudite\Doctrine\DQL\Date',
]
// ...
$configListener->setMergedConfig($config);
...我也尝试通过 module.config.php
配置,同样的交易...
我添加了这样的日期:
namespace Erudite\Doctrine\DQL;
use Doctrine\ORM\Query\Lexer;
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
class Date extends FunctionNode
{
public $date;
public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
{
return "DATE(" . $sqlWalker->walkArithmeticPrimary($this->date) . ")";
}
public function parse(\Doctrine\ORM\Query\Parser $parser)
{
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->date = $parser->ArithmeticPrimary();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
}
不幸的是,这导致了这个错误:
An abstract factory could not create an instance of doctrine.entitymanager.ormdefault(alias: doctrine.entitymanager.orm_default).
有什么想法吗?
您的自定义函数的正确配置键应该是
$config['doctrine']['configuration']['orm_default']['datetime_functions']
(configuration
而不是 connection
)