DoctrineExtensions(Beberlei)不起作用-条令2

DoctrineExtensions(Beberlei)不起作用-条令2,doctrine,doctrine-orm,dql,doctrine-extensions,Doctrine,Doctrine Orm,Dql,Doctrine Extensions,我安装了,但是mysql无法正常工作 我的自动加载器中有: $doctrineExtensions = new Doctrine\Common\ClassLoader('DoctrineExtensions', ROOT.DS.'library'); $doctrineExtensions->register(); 当我尝试执行以下dql语句时 SELECT YEAR(e.eventdate) FROM \Entities\Event e 我得到以下错误:错误:预期已知函数,在/

我安装了,但是mysql无法正常工作

我的自动加载器中有:

$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中得到'YEAR'

在我的档案顶部有

use \DoctrineExtensions\Query\Mysql; 
我可以看到,如果我键入以下内容,它可以找到类:

    $test = \DoctrineExtensions\Query\Mysql\Year::getSql();
但如果我打字就不会

    $test = Year::getSql();

似乎缺少某些实现,但无法找出问题所在。

您需要注册函数:

$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->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\Query\Mysql\Year');

请注意,其他答案中使用的
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);
您还可以使用完全限定的类名从配置文件中加载,使用
doctor\ORM\configuration
setCustomDateTimeFunctions([…])
,如下所示:

doctrine:
  orm:
    dql:
      datetime_functions:
        year: DoctrineExtensions\Query\Mysql\Year
        month: DoctrineExtensions\Query\Mysql\Month