2017-11-30 15 views
1

Zend Frameworkの3、教義2.私はこのエラーを持っている2つのテーブル教義2マッピング、エラー

/** 
* @ORM\Entity 
* @ORM\Table(name="object") 
*/ 
class Object 
{ 
    /** 
    * @ORM\Id 
    * @ORM\GeneratedValue 
    * @ORM\Column(name="id") 
    */ 
    protected $id; 

    /** 
    * @ORM\OneToOne(targetEntity="..\Host", inversedBy="object") 
    * @ORM\JoinColumn(name="ip", referencedColumnName="IP") 
    */ 
    protected $host; 

} 

/** 
* @ORM\Entity 
* @ORM\Table(name="host") 
*/ 
class Host 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(name="IP") 
    */ 
    protected $ip; 


    /** 
    * @ORM\OneToOne(targetEntity="..\Object", mappedBy="host") 
    * @ORM\JoinColumn(name="IP", referencedColumnName="ip") 
    */ 
    protected $object; 
} 

のMySQLのいくつかのマッピングを作成しましたか?これは、例 - > 5.3に従って行われるようです。 1対1、サイトからの双方向Doctrine

答えて

0

JoinColumnに渡すパラメータが正しくありません。あなたはJoinColumn hereのために文書をチェックすることができます。

は次のように試してみてください:

// For Object class: 
// @ORM\JoinColumn(name="host_ip", referencedColumnName="ip") 

// For Host class 
// @ORM\JoinColumn(name="object_id", referencedColumnName="id") 

これに加えて:mappedByはOneToOneの注釈ではサポートされていません。 targetEntityとinversedByは使用できますが、mappedByは使用できません。

一方、プライマリキーをipにするのは間違っているようです。 Host用に自動生成されたプライマリIDがあり、それを使用してエンティティを接続する必要があります。 ipフィールドは一意に設定できるので、重複はありません。さらに、他のフィールドを持っていなくても、オブジェクトクラス内にipを置くことさえできます。

また、クラス名としてObjectを使用することはお勧めしません。あまりにも一般的です。

+0

このソリューションを試してみます。残念ながら、私はテーブルを編集することはできません、彼らはすでに作成され、使用されています。フィールドはすべて表示されているわけではなく、マッピングに使用されているものだけです – MoOgur

+0

doctrineの使用を開始する前にテーブルが存在していれば、まずクラスを手動で作成するのではなく、doctrineを使ってエンティティを生成できます。ここにハウツーがあります:https://samsonasik.wordpress.com/2013/04/10/zend-framework-2-generate-doctrine-entities-from-existing-database-using-doctrinemodule-and-doctrineormmodule/ –