繁体   English   中英

DoctrineExtensions(Beberlei) 不起作用 - Doctrine 2

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM