2016-03-23 8 views
1

次のDoctrine ORMの例をDoctrine ODMに移植しようとしています。Doctrine MongoDBで単方向多対1の関係MongoIdなしでODM

<?php 
/** @Entity */ 
class User 
{ 
    /** 
    * @ManyToOne(targetEntity="Address") 
    * @JoinColumn(name="address_id", referencedColumnName="address_id") 
    */ 
    private $address; 
} 

/** @Entity */ 
class Address 
{ 
    // ... 
} 

私はドキュメントで見つけることができなかった@JoinColumn()の対応物を探しています。基本的には、参照元フィールド名と参照元フィールド名を自分で設定したいと思います。これどうやってするの?

+0

ODMの参考文献は非常によく文書化されています。http://doctrine-orm.readthedocs.org/projects/doctrine-mongodb-odm/en/latest/reference/reference-mapping.htmlドキュメントはidのみで参照されます。 –

答えて

1

MongoDBでは、idでしか参照できませんが、MongoIDを使用することに限定されません。実際には、idをオブジェクトとして使うなど、好きなものを使うことができます。

これは、MongoODMでAddressのプロパティをidとして動作させ、Userがそのフィールドの値でAddressを参照するようにする必要があります。参照としてsimple=trueも設定する必要があります。

/** 
* @Document 
*/ 
class User 
{ 
    /** 
    * @ReferenceOne(targetDocument="Address", simple=true) 
    */ 
    protected $address; 
} 

/** 
* @Document 
*/ 
class Address 
{ 
    /** 
    * @Id(strategy="NONE") 
    */ 
    protected $someProperty; 
} 

あなたは1人以上のユーザによって参照されているアドレスのいずれかで、そのプロパティの値を変更した場合、その参照が破損し、教義ODMでのいくつかの痛みを伴うエラーが発生しますことを覚えておいてください。

+0

私の2セントを追加するだけで、Mongoは設定された文書識別子を変更することはできません。しかし何も参照されている 'Address'を取り除くことを止めるものはありません。もしそうなら、https://github.com/doctrine/mongodb-odm/pull/1336が役に立ちます – malarzm