私は、ユーザーがジャーナルエントリを記録できるオンラインフードジャーナルを運営しています。入力項目には、食糧項目、運動項目、測定値、完了したタスクの4種類があります。エントリには複数の属性(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のDataMapperのORMを使用して、サブタイプ関係行う方法、ありますか?私はUser Guide's Relationshipsと高度な関係のセクションを見ましたが、何も見つかりません。
それはDataMapperのでは可能ではない場合、私はいくつかの解決策を考えることができますが:サブタイプがアップ属性
- ロール(1つの大きなテーブル、ぐふ)
- ロールスーパータイプがダウン属性(4別々テーブル、ぐふ)
- 囲碁核とDoctrine 2.0 ORM(YAML設定ファイル、ぐふを使用!)
- は母国ORM(私はCodeIgniterのでのKohanaとFuelPHPを選考)テーブル継承をサポートする別のフレームワークを使用してください。
- スーパータイプとサブタイプの関係を手動で記述します(最初はORMの目的に反する)。
私の選択肢には驚きません。オプション1と2は自分自身の頭痛を作ります(this articleの下部を参照)。オプション3は、ハンマーハンマーで手術のようです。私はオプション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-extended))。結局私はDoctrineを使う必要があるようです。ブー。助けてくれてありがとう! –
私はSO-credを持っていないので、私はあなたにアップアップすることはできませんが、2つの別々のオブジェクトを関連付けるという2番目の提案が解決策です。助けてくれてありがとう。 –