2011-06-29 7 views
0

私は自分の問題を説明しようとします。まもなく、私はアドレステーブル、部屋のテーブル、建物のテーブルとユーザーのテーブルを持っています。住所表は、ID、建物、ユーザーの住所を保持できる必要があります。私は直接アソシエーションマッピングを使うことができないので、私は継承マッピングが必要です。私はこれを継承マッピングの問題がよくないことを明らかにする。私の解決策は、部屋、建物、ユーザー(クラス名も含む)のIDを保持する別名テーブルを作成し、アドレステーブルがこの別名テーブルと直接対話できるようにすることです。だからSQLスタイルでこれはエイリアスに参加し、ユーザーはアドレステーブルに参加してユーザーのアドレスを検索します。しかし、どのマッピングスタイルが適合するかを判断することはできませんでした。あなたは私にそれについていくつかのアドバイスをして、それがなぜそんなに簡単な説明をしてくれますか?おかげさまで Doctrine 2継承マッピング戦略アドバイスが必要

答えて

0

は、私はそれ

/** 
* @orm:Table(name="rooms") 
* @orm:Entity 
*/ 
class Room { 
    .... 
    /** 
    * @orm:InheritanceType("JOINED") 
    * @orm:OneToOne(targetEntity="Building") 
    * @orm:JoinColumn(name="bid", referencedColumnName="id", onDelete="CASCADE", nullable=false) 
    */ 
    private $building; 
    .... 
} 

/** 
* @orm:Table(name="Buildings") 
* @orm:Entity 
*/ 
class Building { 
    .... 
    /** 
    * @orm:InheritanceType("JOINED") 
    * @orm:OneToOne(targetEntity="Address") 
    * @orm:JoinColumn(name="aid", referencedColumnName="id", onDelete="CASCADE", nullable=false) 
    */ 
    private $address; 
    .... 
} 

/** 
* @orm:Table(name="rooms") 
* @orm:Entity 
*/ 
class Address { 
    .... 
    /** 
    * @orm:InheritanceType("JOINED") 
    * @orm:OneToOne(targetEntity="User") 
    * @orm:JoinColumn(name="uid", referencedColumnName="id", onDelete="CASCADE", nullable=false) 
    */ 
    private $user; 
    .... 
} 

/** 
* @orm:Table(name="users") 
* @orm:Entity 
*/ 
class User { 
.... 
} 

@orm:ため

 
users 
address 
    buildings 
    rooms 

とコードを(部屋の建物を持っている建物がアドレスを持っている、アドレスを所有することができ、ユーザ)あなたは、私がこのような構造を仮定
のような関係を使用することをお勧めsymfonyでdoctrineを使用する場合の必要性

+0

ありがとうございますが、この構造体に継承はありません。それは1対1の結合です構造。私はDiscriminator Columnsが必要なので、私のニーズに合ったものがClass Table Inheritanceであることが分かったと思います。コーディングが終わったら、ここにコードを投稿します。 – ufucuk

関連する問題