2016-05-09 19 views
0

イムは、私は何も持っていないデータベース内のリレーションを生成しようとすると私は1つのエンティティで2つの団体symfonyの3:1つのエンティティの多くの団体

class User 
{ 
/** 
* @ORM\OneToOne(targetEntity="Employee") 
* @ORM\JoinColumn(name="id", referencedColumnName="id") 
*/ 
protected $employee; 


/** 
* @ORM\OneToOne(targetEntity="Client") 
* @ORM\JoinColumn(name="id", referencedColumnName="id") 
*/ 
protected $client; 
//.... 
} 

を持っています。しかし、1つだけの関連付けがあればそれは機能しています。 私はコンソールコマンドを使用しています:

doctrine:schema:update --force 
+0

詳細はドキュメントを見て、コマンドの出力は何ですか? –

+0

[Doctrine \ DBAL \ Schema \ SchemaException] 名前 'uniq_8d93d649bf396750'の索引がすでに 'user'表に定義されています。 – user3650029

答えて

2

結合列には異なる名前で試してください。あなたは、いくつかの作業をせずにそれをレイアウトしているかイマイチが本当に可能欲しいものAkashさんへのあなたのコメントに基づいて

class User 
{ 

    /** 
    * @ORM\OneToOne(targetEntity="Employee") 
    * @ORM\JoinColumn(name="employee_id", referencedColumnName="id") 
    */ 
    protected $employee; 

    /** 
    * @ORM\OneToOne(targetEntity="Client") 
    * @ORM\JoinColumn(name="client_id", referencedColumnName="id") 
    */ 
    protected $client; 

    //... 
} 

http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/association-mapping.html#association-mapping-defaults

+0

あなたはこのようなものを作成しました。https://i.imgsafe.org/0c753ea.pngこれは良い練習ですか?私はconnect idと(client)idと(employee)idが必要でした。このように:https://i.imgsafe.org/041556e.png – user3650029

+0

はい、一般的に、それは良い習慣です。あなたがそれを持っている方法、まったく同じことをしようとしているが、名前の衝突につながっている。理論的には、あなたが絵に描いているようにそれをすることができますが、それは手作業を必要とし、価値がないことは間違いありません。教義の魔法を利用してください。 – Akash

+0

私は(メイン)IDをユーザーから削除すべきだと思いましたか?ユーザーはクライアント、employee.Rightについてのちょうど基本的な情報です。クライアントテーブルにクライアントを作成し、基本情報をユーザーテーブルに追加します。合ってます? – user3650029

0

。これを達成する最も簡単な方法は、他の2つのテーブルに余分な列を置くことです。参考のため

class User 
{  

    /** 
    * @ORM\OneToOne(targetEntity="Employee", mappedBy="user") 
    */ 
    protected $employee; 

    /** 
    * @ORM\OneToOne(targetEntity="Client", mappedBy="user") 
    */ 
    protected $client; 

    //... 
} 

class Employee 
{  

    /** 
    * @ORM\OneToOne(targetEntity="User", inversedBy="employee") 
    * @ORM\JoinColumn(name="user_id", referencedColumnName="id") 
    */ 
    protected $user; 

    //... 
} 

class Client 
{  

    /** 
    * @ORM\OneToOne(targetEntity="User", inversedBy="client") 
    * @ORM\JoinColumn(name="user_id", referencedColumnName="id") 
    */ 
    protected $user; 

    //... 
} 

bidirectional associations

関連する問題