.. index::
single: Doctrine; Custom DQL functions
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:
.. configuration-block::
.. code-block:: yaml
# 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
.. code-block:: xml
App\DQL\StringFunction
App\DQL\SecondStringFunction
App\DQL\NumericFunction
App\DQL\DatetimeFunction
.. code-block:: php
// 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,
],
],
],
]);
.. note::
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.
.. configuration-block::
.. code-block:: yaml
# config/packages/doctrine.yaml
doctrine:
orm:
# ...
entity_managers:
example_manager:
# Place your functions here
dql:
datetime_functions:
test_datetime: App\DQL\DatetimeFunction
.. code-block:: xml
App\DQL\DatetimeFunction
.. code-block:: php
// 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,
],
],
],
],
],
],
]);
.. _`DQL User Defined Functions`: https://www.doctrine-project.org/projects/doctrine-orm/en/current/cookbook/dql-user-defined-functions.html