Как зарегистрировать пользовательские функции DQL¶
Doctrine позволяет вам указать пользовательские функции DQL. Чтобы узнать больше информации по этой теме, прочтите статью Cookbook Doctrine's "Определяемые пользователем функции DQL".
В Symfony вы можете зарегистрировать ваши пользовательские функции DQL следующим образом:
- YAML
1 2 3 4 5 6 7 8 9 10 11 12
# config/packages/doctrine.yaml doctrine: orm: # ... dql: string_functions: test_string: App\DQL\StringFunction second_string: App\DQL\SecondStringFunction numeric_functions: test_numeric: App\DQL\NumericFunction datetime_functions: test_datetime: App\DQL\DatetimeFunction
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
<!-- config/packages/doctrine.xml --> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:doctrine="http://symfony.com/schema/dic/doctrine" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/doctrine http://symfony.com/schema/dic/doctrine/doctrine-1.0.xsd"> <doctrine:config> <doctrine:orm> <!-- ... --> <doctrine:dql> <doctrine:string-function name="test_string">App\DQL\StringFunction</doctrine:string-function> <doctrine:string-function name="second_string">App\DQL\SecondStringFunction</doctrine:string-function> <doctrine:numeric-function name="test_numeric">App\DQL\NumericFunction</doctrine:numeric-function> <doctrine:datetime-function name="test_datetime">App\DQL\DatetimeFunction</doctrine:datetime-function> </doctrine:dql> </doctrine:orm> </doctrine:config> </container>
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
// config/packages/doctrine.php use App\DQL\StringFunction; use App\DQL\SecondStringFunction; use App\DQL\NumericFunction; use App\DQL\DatetimeFunction; $container->loadFromExtension('doctrine', array( 'orm' => array( // ... 'dql' => array( 'string_functions' => array( 'test_string' => StringFunction::class, 'second_string' => SecondStringFunction::class, ), 'numeric_functions' => array( 'test_numeric' => NumericFunction::class, ), 'datetime_functions' => array( 'test_datetime' => DatetimeFunction::class, ), ), ), ));
Note
Если entity_managers
были ясно названы, конфигурация функций напрямую с ORM вызовет
исключение "Неопределённая опция "dql" в "doctrine.orm". Блок конфигурации dql
должен
быть определён под названным менеджером сущностей.
- YAML
1 2 3 4 5 6 7 8 9 10
# config/packages/doctrine.yaml doctrine: orm: # ... entity_managers: example_manager: # Place your functions here dql: datetime_functions: test_datetime: App\DQL\DatetimeFunction
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
<!-- config/packages/doctrine.xml --> <?xml version="1.0" encoding="UTF-8" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:doctrine="http://symfony.com/schema/dic/doctrine" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/doctrine http://symfony.com/schema/dic/doctrine/doctrine-1.0.xsd"> <doctrine:config> <doctrine:orm> <!-- ... --> <doctrine:entity-manager name="example_manager"> <!-- поместите ваши функции здесь --> <doctrine:dql> <doctrine:datetime-function name="test_datetime"> App\DQL\DatetimeFunction </doctrine:datetime-function> </doctrine:dql> </doctrine:entity-manager> </doctrine:orm> </doctrine:config> </container>
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
// config/packages/doctrine.php use App\DQL\DatetimeFunction; $container->loadFromExtension('doctrine', array( 'doctrine' => array( 'orm' => array( // ... 'entity_managers' => array( 'example_manager' => array( // place your functions here 'dql' => array( 'datetime_functions' => array( 'test_datetime' => DatetimeFunction::class, ), ), ), ), ), ), ));
Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.