Как зарегистрировать пользовательские функции DQL

Дата обновления перевода 2025-02-14

Как зарегистрировать пользовательские функции DQL

Doctrine позволяет вам указать пользовательские функции DQL. Чтобы узнать больше информации по этой теме, прочтите статью Cookbook Doctrine "`Определяемые пользователем функции DQL`_".

В Symfony вы можете зарегистрировать ваши пользовательские функции DQL следующим образом:

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

Note

Если entity_managers были ясно названы, конфигурация функций напрямую с ORM вызовет исключение Unrecognized option "dql" under "doctrine.orm". Блок конфигурации dql
должен быть определён под названным менеджером сущностей.

1
2
3
4
5
6
7
8
9
10
# config/packages/doctrine.yaml
doctrine:
    orm:
        # ...
        entity_managers:
            example_manager:
                # Поместите ваши функции здесь
                dql:
                    datetime_functions:
                        test_datetime: App\DQL\DatetimeFunction

Warning

Функции DQL инстанциируются Doctrine вне сервис-контейнера Symfony, поэтому вы не можете внедрять сервисы или параметры в пользователькую функцию DQL.