我正在運行在線食品日記,用戶可以在其中記錄日記帳分錄。有四種類型的條目:食物條目,練習條目,測量和已完成的任務。條目有幾個共同的屬性(例如,id,amount,unit_id等),但它們也具有類型特定的屬性(例如,food_id,exercise_id等)。這是超級和子類型關係的完美選擇。如何在CodeIgnitor的DataMapper ORM中設置超類型和子類型關係?
這裏是我的表(簡體):
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的ORM的DataMapper?我查看了User Guide's Relationships和Advanced Relationships部分,但找不到任何東西。
如果這是不可能的DataMapper,我能想到的幾個解決方案:
- 滾子類型屬性了(1個大表,啊)
- 卷的超類型的屬性下降(4個獨立表啊)
- 去核,並使用Doctrine ORM 2.0(YAML配置文件,唉!)
- 使用不同的框架,其原生ORM支持表繼承(我入圍的Kohana和FuelPHP使用CodeIgniter)。
- 手動編碼超類型和子類型關係(首先破壞了ORM的用途)。
我對我的任何選擇都不感到激動。選項1和2會產生他們自己的頭痛(請參閱this article的底部)。選項3看起來像用大錘手術。我對Option 4很開放,因爲我還沒有開始編寫任何框架代碼(這是CI和Kohana之間的一個非常艱難的選擇)。選項5是我現在的位置。
有什麼建議嗎?謝謝您的幫助!
感謝Swatkins,我也貼了問題(以稍微不同的形式)在[CodeIgnitor論壇](http://codeigniter.com/ forums/viewthread/203944 /)和維護DataMapper ORM庫的WanWizard做出了迴應。爲了解釋,我不能按原樣使用超級/子類型關係。我需要改變我的表格。 WRT擴展了一個Entry基類,我認爲這在目前的版本中是不可能的(參見[Issue#61](https://bitbucket.org/wanwizard/datamapper/issue/61/datamapper-class-can-not) -be擴展))。看起來我必須畢竟使用Doctrine。噓。謝謝您的幫助! –
嗯,我無法贊成你,因爲我沒有任何SO-cred,但你關於兩個獨立對象的第二個建議是解決方案。謝謝您的幫助。 –