Задача: реализовать для некоторых пользователей индивидуальные цены на услуги. Не для каждой услуги может быть своя индивидуальная цена(то есть, при отсутствии индивидуальной цены выводить стандартную).
Упрощенная схема таблиц:Текстом
Таблица: user
Поля: id(type: integer, lenght: 11, AutoIncrement)
Таблица: service
Поля: id(integer, 11, AI), price(float)
Таблица: individual_price
Поля: id(integer, 11, AI), service(integer, 11, relation service.id), user(integer, 11, relation user.id), price(float)
Какие идеи/подходы обдумывал:
1. Использование поведения
AttributeBehaivor вместе с событием "afterFind". Проблема в том, что данное поведение обрабатывает индивидуально каждую отдельную запись базы данных, и при получении индивидуальных цен генерируется соответствующее количество запросов. Подробнее
здесь.
2. Организовать отдельный метод, куда будет помещаться результат выполнения запроса цены, получать индивидуальные цены по ID пользователя и в цикле изменять цену услуг, в итоге возвращать объект с измененными ценами. Тут ряд минусов начиная от того, что придется делать методы для многих вариаций, проблемы с joinWith, а также небезопасно.
UPD 07.10.18: Вопрос актуален. Обновил и более лучше структурировал.