@galliard

Можно ли в доктрине создать вычисляемое поле?

Допустим, есть таблица платежей и таблица комиссий. Для каждого платежа может быть несколько записей в таблице комиссий. Мне бы хотелось иметь в сущности платежа поле с суммой всех его комиссий, но при это в таблице платежа такого поля не иметь, а вычислять его на уровне приложения. В идеале это вычисление должно быть ленивым. Есть ли возможность сделать такое средствами доктрины?
  • Вопрос задан
  • 159 просмотров
Пригласить эксперта
Ответы на вопрос 1
@dzhebrak
Если у платежа будет небольшое количество комиссий (т.е. не будет падать из-за memory_limit), то проще всего в сущности Платеж сделать метод, в котором вручную посчитать сумму его комиссий.

Минус в том, что если нужно будет на одной странице показать много платежей, то доктрине для каждого из них будет необходимо загрузить комиссии, а значит для каждого будет отдельный запрос в бд. Чтобы этого избежать, нужно в репозитории сущности Платеж добавить метод, в котором вернуть все необходимые платежи, сделав при этом join комиссий ( https://www.doctrine-project.org/projects/doctrine... ). Например:

this->createQueryBuilder('p')->addSelect('c')->leftJoin('p.comissions', 'c')->getQuery()->getResult();

p - альяс для сущности Платеж,
c - альяс для сущности Комиссия

Если же комиссий много, и высчитывать в памяти не вариант, то остается использовать DQL в репозитории сущности Платеж https://www.doctrine-project.org/projects/doctrine...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы