Мне нужно делать запросы с ГОДОМ, и я установил beberlei / DoctrineExtensions с помощью команды doctrine. Я добавил запрошенные аннотации
doctrine:
orm:
auto_generate_proxy_classes: '%kernel.debug%'
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
dql:
datetime_functions:
year: DoctrineExtensions\Query\Mysql\Year
, но не получается, у меня такая ошибка:
Attempted to load class "Year" from namespace "DoctrineExtensions\Query\Mysql". Did you forget a "use" statement for another namespace?
Запрос:
public function groupTypeInterArray(){
$qb = $this->createQueryBuilder('i')
->select('YEAR(i.interventionDate)');
return $qb->getQuery()->execute();
}
Доктрина конфигурации
# Doctrine Configuration
doctrine:
dbal:
driver: pdo_mysql
host: '%database_host%'
port: '%database_port%'
dbname: '%database_name%'
user: '%database_user%'
password: '%database_password%'
charset: UTF8
# if using pdo_sqlite as your database driver:
# 1. add the path in parameters.yml
# e.g. database_path: '%kernel.project_dir%/var/data/data.sqlite'
# 2. Uncomment database_path in parameters.yml.dist
# 3. Uncomment next line:
#path: '%database_path%'
orm:
auto_generate_proxy_classes: '%kernel.debug%'
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
dql:
datetime_functions:
Year: DoctrineExtensions\Query\Mysql\Year
Я искал весь день, но не нашел решения.
Заранее спасибо.
Да, я сделал это, но не работает
Не могли бы вы проверить изменение "datetime_functions" на "string_functions"
У меня такая же ошибка с "string_functions".
Не могли бы вы добавить свой запрос?
Конечно, я просто отредактировал свое сообщение, чтобы его поставить.
Запрос кажется нормальным, какую версию Symfony вы используете?
Я использую Symfony 3.4.
Не могли бы вы поделиться своей конфигурацией доктрины из config.yml?
Да все хорошо, отредактировал свое сообщение, чтобы поставить.
Странно, потому что я заменил вашу конфигурацию в моем локальном проекте, и все еще работает нормально, если вы используете Linux, можете ли вы запустить команду в терминале: la -la vendor/beberlei/DoctrineExtensions/src/Query/Mysql/Year.php в каталоге вашего проекта и вставить вывод сюда?
Я не использую Linux, извините.
Хорошо, тогда не могли бы вы проверить, доступен ли вышеуказанный файл у вашего поставщика или нет?
А также проверьте разрешение этого файла, если таковое имеется.
vendor / beberlei / DoctrineExtensions / src / Query / Mysql / Year.php все в порядке. А разрешение? где мне искать?
Какую ОС вы используете? Windows?
Да, это Windows 10.
хорошо, затем откройте свой cmd и выполните следующие действия: 1. перейдите в свой каталог 2. выполните команду: «dir vendor / beberlei / DoctrineExtensions / src / Query / Mysql / Year.php» (проверьте верхний и нижний регистр как окно нечувствительно к регистру) 3. Откройте файл в своей папке и проверьте разрешение, щелкнув по нему правой кнопкой мыши.
Я редактирую свое первое сообщение с разрешением и результатом для команды: Répertoire: D: \ Users \ delph \ Desktop \ NetBeansProjects \ ProjetMairie6 \ vendor \ beberlei \ DoctrineEx tensions \ src \ Query \ M ysql Mode LastWriteTime Длина Имя ---- ------------- ------ ---- -a ---- 10.10.2018 15:55 678 Year.php
Не могли бы вы проверить, является ли файл исполняемым или нет? Погуглите, как проверить, является ли файл исполняемым или нет в Windows. Файл должен иметь разрешение 644.
Я в винде так что все нормально
Проблема решена. но я больше ничего не делал.
Странно, но я рад, что проблема решена




1.dql:
datetime_functions:
year: DoctrineExtensions\Query\Mysql\Year ???
2.dql:
datetime_functions:
Year: DoctrineExtensions\Query\Mysql\Year ???
Может быть
dql:
datetime_functions:
YEAR: DoctrineExtensions\Query\Mysql\Year
MONTH: DoctrineExtensions\Query\Mysql\Month
DAY: DoctrineExtensions\Query\Mysql\Day
Для меня удаление каталога поставщика и установка нового композитора решила проблему.
в запросе замените "Год" на "год"
поэтому используйте вместо этого следующий код:
public function groupTypeInterArray(){
$qb = $this->createQueryBuilder('i')
->select('year(i.interventionDate)');
return $qb->getQuery()->execute();
}
и вам также необходимо изменить соответствующую строку в конфиге доктрины:
заменяет этот код
Year: DoctrineExtensions\Query\Mysql\Year
По этому коду
year: DoctrineExtensions\Query\Mysql\Year
PS: чтобы узнать, какую ссылку вы должны использовать для правильного добавления функции в конфигурацию доктрины, вам нужно перейти на эта ссылка
Вы установили
beberlei/DoctrineExtensionsс помощью командыcomposer require beberlei/DoctrineExtensions