ここで指摘したとおりです:Doctrine 2.1 - Map entity to multiple tables Doctrine2では、1つのオブジェクトを複数のテーブルにマッピングすることはできません。Doctrine2、 "継承された"テーブルのマッピング
私は現在、これに似たMySQLのDBのセットアップがありますように
base_entity: id, some_basic_data_columns
state: id, state, entity_id (FK to base_entity.id), start_time, end_time, ...
entity_one: id (FK to base_entity.id), some_specific_data
entity_two: id (FK to base_entity.id), some_specific_data
and so on...
を、entity_xはbase_entityを「拡張」され、すべてのこれらのエンティティは、複数の状態を持つことができます。適切な外部キーを持つためには、別の状態テーブル(構造的に同じであるため、やりたくない)か、これを好きにするかのどちらかが必要です。
基本エンティティ自体は無意味です。idは、各子エンティティと複数の状態を結ぶことを許可するために、idフィールドだけで煮詰めることさえできます。
BaseEntityクラスは必要ありませんが、各子エンティティにgetStates()メソッドが必要です。もちろん抽象エンティティクラスを持っていても構いませんが、具体的なエンティティはそれを拡張します。他の1対1の関係をマップするようにマップすると、プロパティを持たないでしょう。
Doctrineは私が聞いている私は両方entity_oneとbase_entityテーブルにEntityOneをマップすることができません:
をこの悪いデザインですか?私はこれを優雅に解決する他の方法を見落としていますか?私は他のDMBSに継承があることを知っていますが、例えば、PostgreSQLは、子に対して物理的なbase_entityが存在しなければ、base_entityへの参加を許可しません。
私は、コード側でこのような何かを行うことができます:
class EntityOne { // baseEntity as a property private $_baseEntity; // private getter for the base table private getBaseEntity(); // and getters like this for properties in the base table public getStates(){ return $this->getBaseEntity()->getStates(); } }
エンティティが外の世界へ(ベースと子から結合していない)単一のエンティティのように振る舞うだろうが、それはまだだろう。この方法これは、DBの設計の問題であり、私はからそれは完全に間違っていました:私は基本的に、私が求めていることである他のエンティティクラス
に接続する別のBaseEntityクラスと、すべての設定情報を書き込むことを要求スタート(そしてもし私がしたら、これは "ベスト"アプローチです)これはコードの問題であり、コードで回避する必要があります(もしそうなら、私のアプローチはOKですか、これに対処するより良い方法があります)。複数のテーブルマッピングを可能にするORMがありますか?
事前に感謝します。
おかげで、私は、ドキュメントのその部分を逃したと思います。とにかく、これは私が欲しいものを達成するでしょう。 – Pinetree