Решил начать писать нормальные модели для представления сущностей в проекте.
В моем понимании модель - это какая-то сущность, представляющая одну таблицу в бд.
Экземпляр класса этой модели, соответсвенно представляет конкретную строку таблицы.
Собственно стокнулся с проблемой инстанцирования моделей.
Предположим, что есть две сущности: тарифные планы и опции, из которых эти тарифные планы и состоят. пусть для простоты будет 2 таблицы: plans, options
Тогда есть 2 модели: Plan, Option.
Если придерживаться объектного подхода, то Объект класса Plan должен содержать в себе массив объектов класса Option из которых он состоит.
Но как такой объект инстанцировать?
Сейчас получается так (упрощенно):
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- Class Plan {
- // Небольшая частаная factory (можно вынести в отдельный класс PlanManager)
- public static getById($id) {
- // Формируем запрос в БД
- $sql = "SELECT .... FROM plans JOIN options ON (....) ...."
- $result = db::query($sql); // каким-то образом выгружаем из бд тариф и все его опции
- $Plan = new Plan($name, $cost, $....); // Cоздаем экземпляр модели
- while(options) { // проходим все вытаенные опции в цикле
- $Option = new Option($name, $type, $...);
- $Plan->addOption($Option); // Добавили в план опцию.
- }
- return $Plan;
- }
- // Методы класса
- public function __construct($name, $cost, $....) { .... }
- public function getOptions() {
- return $this->_options;
- }
- // остальная логика
- }
- // Где-то в приложении
- $Plan = Plan::getById(10);
- $options = $Plan->getOptions(); // Вернет массив объектов, хранящихся внутри плана
- foreach($options as $Option) {
- $Option->..... ; // что-то делаем в цикле
- }