我安装了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
在我的文件顶部,我有
use \DoctrineExtensions\Query\Mysql;
我可以看到如果我输入它可以找到该类:
$test = \DoctrineExtensions\Query\Mysql\Year::getSql();
但如果我输入
则不行 $test = Year::getSql();
似乎缺少某些实现,但无法找出问题所在..
答案 0 :(得分:0)
您需要注册该功能:
$classLoader = new \Doctrine\Common\ClassLoader('DoctrineExtensions');
$classLoader->register();
...
$config = $this->getEntityManager()->getConfiguration();
$config->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\Query\Mysql\Year');
答案 1 :(得分:0)
有点晚了:),但是它将帮助像我这样从客户那里获得旧项目的其他人。
您必须注册DoctrineExtension目录的名称空间:
$classLoader = new \Doctrine\Common\ClassLoader('DoctrineExtensions', APPPATH . 'libraries/vendor/beberlei');
$classLoader->register();
现在,当您从作曲家那里获得DoctrineExtensions
时,它位于src
目录下,因此只需向上移动src
目录的内容(位于DoctrineExtensions
下)并将您需要的扩展名添加到配置中:
$config->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\Query\Mysql\Year');
答案 2 :(得分:0)
请注意,其他答案中使用的items.stream().anyMatch(item -> item.getAge() == null ? System.out.println());
已被弃用。
正确的方法是:
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([...])