2012-01-17 10 views
0

私はphpでDoctrine 2 MongoDB ODMに関する質問があります。Doctrine 2 MongoDb ODMリファレンス

だから私はエンティティA内エンティティAを持っている私は、EntityBさんのObjectId経由EntityBを参照したいと思います。だからEntityA私は変数Aを以下のDocblock:@ODM \ ReferenceOne(targetDocument = "EntityB"、単純= "真")としています。私はのsetMethodはそれがエンティティAEntityBの全体を設定し、呼び出すとき

問題があるだけではなく、私がやりたいものですOBJECTID

基本的にエンティティAは次のようになります。私がしたいことは、私が試してみましたかのように可能である場合

ENTITYA { 
    randomFieldA, 
    randomFieldB, 
    EntityB ObjectId 
}  

誰でも知っていますか?誰かがより良い方法を知っていますか?

この例のように、基本的に

/** @Document */ 
class TopCategory 
{ 

    /** @EmbedMany(targetDocument="SubCategory") */ 
    private $subCategories; 

} 

/** @EmbeddedDocument */ 
class SubCategory 
{ 

    /** @ReferenceOne(targetDocument="Product") */ 
    private $product; 

} 


/** @Document */ 
class Product 
{ 

    /** @id */ 
    private $id; 

    /** @String */ 
    private $name; 

} 

今私はsubCategory->productで唯一の製品のIDと全体ではなく、製品を保存する方法を教えてください。

答えて

1

ODMの仕組みです。オブジェクト側ではProductSubCategoryに追加します。

あなたのモンゴデータベースにのみ関係を作成するには

(あなた Subcategory項目で)例えば、
"product": { 
    "$ref": "Product", 
    "$id": ObjectId("4b0552b0f0da7d1eb6f126a1") 
} 

を参照が格納されます、あなたは、単に例えば

// $product is a persisted Product object 
$subcategory->setProduct($product); 

に、SubCategoryにあなたのProductを設定Product IDをSubCategoryから取得すると、

$productId = $subcategory->getProduct()->getId(); 

スタンドアロン文書との関係を作成したいときは、参照を使用


(あなたが定義されている適切なセッターゲッターメソッドを持っていると仮定)。これは、他の多くのドキュメント(サブカテゴリなど)の1つのドキュメント(製品など)にリンクしたい場合に特に当てはまります。

埋め込みドキュメントは、そのドキュメントをその親の一部としてのみ使用する場合に使用します。

+0

私の製品の例のように。 SubCategory->製品には製品のIDのみが含まれていますか? – user1154863

+0

また、いつ参照を使用し、いつEmbedを使用しますか? – user1154863

+0

@ user1154863いいえ、 'SubCategory'の' product'プロパティは 'Product'型のオブジェクトを含んでいます。私はより多くの情報で私の答えを更新しました – Phil

関連する問題