1

私はちょうどこのトリッキーな状況に遭遇しました。私はGiftというエンティティを持っています。

ここで、ギフトエンティティには、 2つのエンティティエンティティまたはエンティティreceiverに関連付けることができるというフィールドが必要です。RegisteredUserGuest

ここでの問題は、レシーバーフィールドの関連付けをどのように定義するかです。

継承マッピングを使用するというエンティティを作成することを考えましたGiftReceiverが、GiftReceiverを拡張しないクラスにディスクリミネーターをマップできません。

私は間違った方向に進んでいますか?これを実装する良い方法はありますか?よろしくお願いします!! :)

4

3 に答える 3

4

Userasのサブクラスを作成するのはどうですか。レシーバーフィールドをエンティティGuestにマップするだけです。UserでレシーバーエンティティをフェッチするGiftと、doctrineは適切なオブジェクトをフェッチしますGuestRegisteredUser

于 2012-04-30T09:29:34.760 に答える
1

たぶん、あなたはあなたのエンティティにロジックを入れることができます、それはaGuestかaのどちらかを返しますRegisteredUser、両方ともと呼ばれる同じインターフェースを実装しますGiftReceiver

class Gift {

    // mapped to guest; nullabe true
    protected $guest;

    // mapped to registeredUser; nullabe true
    protected $registeredUser;


    public function getReceiver()
    {
        return $this->getGuest() ?: $this->getRegisteredUser();
    }

    // getters/setters ...
}
于 2012-04-28T15:25:53.107 に答える
0

GiftIntermediaryエンティティのようなものを作成するのはどうですか。次のフィールドを使用します。

Receiver
RegisteredUser 
Guest 

次に、次の関連付けを適用します。

Gift.Receiver = GiftIntermediary.Receiver
RegisteredUser.ID = GiftIntermediary.RegisteredUser 
Guest.ID = GiftIntermediary.Guest 

上記の関連付けからデータを収集するためのサンプルクエリを次に示します。

SELECT Gift.*, RegisteredUser.*, Guest.*
FROM Guest INNER JOIN (RegisteredUser INNER JOIN (Gift INNER JOIN GiftIntermediary ON Gift.Receiver = GiftIntermediary.Receiver) ON RegisteredUser.ID = GiftIntermediary.RegisteredUser) ON Guest.ID = GiftIntermediary.Guest
于 2012-04-27T19:04:54.713 に答える