Я веду онлайн-журнал о еде, где пользователи могут записывать записи в журнале.Существует четыре типа записей: записи еды, записи упражнений, измерения и выполненные задачи.Записи имеют несколько общих атрибутов (например, id, amount, unit_id и т. Д.), Но они также имеют специфичные для типа атрибуты (например, food_id, упражнение_id и т. Д.).Это идеальный кандидат для отношений супер- и подтипов.
Вот мои таблицы (упрощенно):
CREATE TABLE entries
`id` int
`user_id` int
`created` datetime
`entered` datetime
`amount` float
`unit_id` int
PRIMARY KEY id
CREATE TABLE exercise_entries
`entry_id` int
`exercise_id` int
PRIMARY KEY entry_id
CREATE TABLE food_entries
`entry_id` int
`food_id` int
PRIMARY KEY entry_id
Итак, мой вопрос, как мне настроить супер- и саб.отношения с использованием DataMapper ORM CodeIgniter?Я просматривал разделы Руководства пользователя и Расширенные отношения, но ничего не могу найти.
Если это невозможно с DataMapper, я могу придумать несколько решений:
- Свернуть атрибуты подтипа вверх (1 большая таблица, тьфу)
- Свернуть атрибуты супертипа вниз (4 отдельные таблицы, тьфу)
- Идти ядерно и использоватьDoctrine 2.0 ORM (файлы конфигурации YAML, тьфу!)
- Используйте другую платформу, чей собственный ORM поддерживает наследование таблиц (я включил в список Kohana и FuelPHP с CodeIgniter).
- Вручную кодируйте супер- и суб-тип отношений (в первую очередь побеждает цель ORM).
Я не в восторге ни от одного из моих вариантов.Варианты 1 и 2 создают свои собственные головные боли (см. в этой статье ).Вариант 3 выглядит как операция с кувалдой.Я открыт для варианта 4, потому что я еще не начал писать какой-либо каркасный код (это был действительно трудный выбор между CI и Kohana).Вариант 5 - это то, где я сейчас нахожусь.
Есть предложения?Спасибо за помощь!