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

Дата обновления перевода 2023-09-04

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

Doctrine позволяет вам указать пользовательские функции DQL. Чтобы узнать больше информации по этой теме, прочтите статью Cookbook Doctrine's "`Определяемые пользователем функции 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 вызовет исключение "Неопределённая опция "dql" в "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

Caution

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