How to Register custom DQL Functions¶
Doctrine allows you to specify custom DQL functions. For more information on this topic, read Doctrine’s cookbook article “DQL User Defined Functions”.
In Symfony, you can register your custom DQL functions as follows:
- 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 https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/doctrine https://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\DatetimeFunction; use App\DQL\NumericFunction; use App\DQL\SecondStringFunction; use App\DQL\StringFunction; $container->loadFromExtension('doctrine', [ 'orm' => [ // ... 'dql' => [ 'string_functions' => [ 'test_string' => StringFunction::class, 'second_string' => SecondStringFunction::class, ], 'numeric_functions' => [ 'test_numeric' => NumericFunction::class, ], 'datetime_functions' => [ 'test_datetime' => DatetimeFunction::class, ], ], ], ]);
注釈
In case the entity_managers
were named explicitly, configuring the functions with the
ORM directly will trigger the exception Unrecognized option "dql" under "doctrine.orm"
.
The dql
configuration block must be defined under the named entity manager.
- 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 https://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/doctrine https://symfony.com/schema/dic/doctrine/doctrine-1.0.xsd"> <doctrine:config> <doctrine:orm> <!-- ... --> <doctrine:entity-manager name="example_manager"> <!-- place your functions here --> <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', [ 'doctrine' => [ 'orm' => [ // ... 'entity_managers' => [ 'example_manager' => [ // place your functions here 'dql' => [ 'datetime_functions' => [ 'test_datetime' => DatetimeFunction::class, ], ], ], ], ], ], ]);