[英]DoctrineExtensions(Beberlei) does not work - Doctrine 2
我安装了Beberlei DoctrineExtensions,但无法让 mysql DAY 和 YEAR 工作。
我的自动加载器中有这个:
$doctrineExtensions = new Doctrine\Common\ClassLoader('DoctrineExtensions', ROOT.DS.'library');
$doctrineExtensions->register();
当我尝试执行以下 dql 语句时
SELECT YEAR(e.eventdate) FROM \Entities\Event e
我收到以下错误:错误:预期的已知函数,在 /usr/local/lib/php/Doctrine/ORM/Query/QueryException.php:42 中得到 'YEAR''
在我的文件顶部我有
use \DoctrineExtensions\Query\Mysql;
我可以看到如果我输入它可以找到类:
$test = \DoctrineExtensions\Query\Mysql\Year::getSql();
但不是如果我输入
$test = Year::getSql();
似乎缺少某些实现,但无法找出问题所在..
请注意,其他答案中使用的Doctrine\\Common\\ClassLoader
现在已弃用。
正确的方法是这样的:
use DoctrineExtensions\Query\Mysql\Year;
...
$config = new \Doctrine\ORM\Configuration();
// Can also be:
// $config = \Doctrine\ORM\Tools\Setup::createConfiguration();
// Or:
// $config = \Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration([...]);
$config->addCustomDateTimeFunction('YEAR', Year::class);
您还可以使用Doctrine\\ORM\\Configuration
setCustomDateTimeFunctions([...])
使用完全限定的类名从配置文件加载,如下所示:
doctrine:
orm:
dql:
datetime_functions:
year: DoctrineExtensions\Query\Mysql\Year
month: DoctrineExtensions\Query\Mysql\Month
您需要注册该功能:
$classLoader = new \Doctrine\Common\ClassLoader('DoctrineExtensions');
$classLoader->register();
...
$config = $this->getEntityManager()->getConfiguration();
$config->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\Query\Mysql\Year');
有点晚了 :) 但它会帮助像我这样从客户那里获得旧项目的其他人。
您必须注册 DoctrineExtension 目录的命名空间:
$classLoader = new \Doctrine\Common\ClassLoader('DoctrineExtensions', APPPATH . 'libraries/vendor/beberlei');
$classLoader->register();
现在,当您从 Composer 获取DoctrineExtensions
时,它位于src
目录下,因此只需向上移动src
目录的内容(在DoctrineExtensions
)并将您需要的扩展名添加到 config :
$config->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\Query\Mysql\Year');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.