#ооп #orm #проектирование #kohana #php
Добрый день. Сначала перечисляю сущности. sуstems - некие системы. preferences - некоторые настройки, сокращенно pref pref имеет разные типы, например настройки кеша (cache) и тамаута (timeout). Таким образом pref можно записывать в одну таблицу с полями id, value, type или в две разные таблицы - prefcache и preftimeout с той же структурой. Идем дальше. Поля таблицы system - id, name. Осуществляется связь многие ко многим через таблицу prefs_systems с полями: id_system, id_pref, type (можно вынести сюда в случае отдельных таблиц prefcache и preftimeout. И вот зачем две таблицы pref, я хочу на каждую делать свой ORM, т.е. есть базовый ORM_Pref extends ORM и от него наследуются ORM_Prefcache и ORM_Preftimeot. Каждый работает со своей таблицей, а общие настройки в базовом классе. В этом случае в каждой ORM прописываются связи $_has_many. В случае ORM pref все очевидно, по одной записи связей $_has_many к ORM_System. В случае с описанием ORM_System получается такая конструкция (додумался пока писал). protected $_has_many = array( 'prefcache' => array( 'model' => 'orm_prefcache', 'foreign_key' => 'id_system', 'through' => 'prefs_systems', 'far_key' => 'id_pref', ), 'preftimeot' => array( 'model' => 'orm_preftimeout', 'foreign_key' => 'id_system', 'through' => 'prefs_systems', 'far_key' => 'id_pref', ), ); Вопросы: Почему редактор съел почти все символы нижнего подчеркивания? Нормально ли я придумал структуру? Могу ли я базовый класс ORM_Pref объявить абстрактным (т.к. у него нет привязанной таблицы и его не надо создавать) ? Можно ли как-то улучшить мою структуру? Если все выше правильно, то при добавления нового типа настроек я должен буду прописать связь в ORM_System, это не удобно.
Ответы
Ответ 1
хорошо в таком случае использовать orm-библиотеки (напр. Doctrine). Можно создать схему в mysql workbench, форвард-инжинирингом создать БД и при помощи комманды doctrine сгенерировать сущности
Комментариев нет:
Отправить комментарий