我正在运行一个在线食品杂志,用户可以在其中记录日记条目。有四种类型的条目:食物条目、运动条目、测量和完成的任务。条目有几个共同的属性(例如,id、amount、unit_id 等),但它们也有特定于类型的属性(例如,food_id、exercise_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
所以我的问题是,如何使用 CodeIgniter 的 DataMapper ORM 设置超类型和子类型关系?我查看了用户指南的关系和高级关系部分,但找不到任何东西。
如果 DataMapper 无法实现,我可以想到一些解决方案:
- 向上滚动子类型属性(1个大表,呃)
- 向下滚动超类型属性(4 个单独的表,呃)
- 去核并使用 Doctrine 2.0 ORM(YAML 配置文件,啊!)
- 使用其原生 ORM 支持表继承的不同框架(我将 Kohana 和 FuelPHP 与 CodeIgniter 列入候选名单)。
- 手动编码超类型和子类型关系(首先破坏了 ORM 的目的)。
我对我的任何选择都不感到兴奋。选项 1 和 2 会让人头疼(请参阅本文底部)。选项 3 似乎是用大锤进行的手术。我对选项 4 持开放态度,因为我还没有开始编写任何框架代码(这是 CI 和 Kohana 之间的一个非常艰难的选择)。选项 5 就是我现在所在的位置。
有什么建议么?谢谢您的帮助!