Doctrine2でクラスのマッピングを設定する方法がわかりません。 (アドレスは、それ自体で存在することができDoctrine2:継承したクラスの効率的なマッピング
- :以下の要件を考慮すると
class Address{} class BusinessAddress extends Address{} class PersonalAddress extends Address{}
:
Address table --------------------- - id - civic_no - road - state - country PersonnalAddress table --------------------- - id - base_address_id - type - is_primary BusinessAddress table --------------------- - id - base_address_id - business_name - shipping_phone - is_primary
そしてthoses PHPオブジェクト:
レッツは、私はこれらのテーブルをしたと言いますアドレスクラスは抽象ではありません)
- 個人的住所とbusinessAddressは全く同じ住所データを持つことができます
- 住所を削除または編集すると、その住所がビジネスまたは個人の住所から継承されたすべての住所に影響します。
- 私はデータベースにデータの複製をしたくありません(これは2番目の正規形式の要件です)
- プロキシの方法はコードの重複を意味し、私は持っていない方がいいです。
- マジックメソッドはテスト容易性の点では良くありません。
より良い問題を説明するために、私は、データベース内のデータがどのように見えることを期待:論文の要件を満たすソリューションを実装するための最良の戦略だろう何
Address table:
id | civic_no | road | state | country
1 123 test qc ca
PersonnalAddress table:
id | base_address_id | type | is_primary
1 1 A 0
2 1 B 1
BusinessAddress table:
id | base_address_id | business_name | shipping_phone | is_primary
1 1 chic choc 1231234 1
?
これはうまくいくと思います。マニュアルでは、「マップされたスーパークラスでは1対多の関連付けが不可能である」ということを示しています。また、他の2種類の継承は、 2つの異なるタイプが同じ親を持つことは不可能です。 – FMaz008