2012-01-17 120 views
0

我有一個問題涉及到Doctrine 2 MongoDB ODM在PHP中。學說2 MongoDb ODM參考

所以我有一個EntityA和內EntityA我想通過引用EntityB EntityB的ObjectId。所以在EntityA我有一個變量A與以下Docblock:@ODM \ ReferenceOne(targetDocument =「EntityB」,簡單=「true」)

問題是,當我致電使用setMethod它整個EntityB的套入EntityA,而不僅僅是OBJECTID這是我想做些什麼。

基本上EntityA看起來是這樣的:

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的工作原理。在物體方面,您將Product添加到SubCategory

你Mongo的數據庫將只有參考,例如存儲(在你的Subcategory項目)

"product": { 
    "$ref": "Product", 
    "$id": ObjectId("4b0552b0f0da7d1eb6f126a1") 
} 

要創建關係,您只需設置ProductSubCategory,如

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

要從SubCategory獲得Product ID,您只需使用

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

(假設你有相應的二傳手的getter方法定義)


當你想創建一個獨立的文件的關係,您使用引用。如果您希望從許多其他文檔(例如您的SubCategories)鏈接到一個文檔(例如您的產品),尤其如此。

當您只將該文檔作爲其父文件的一部分時,將使用嵌入式文檔。

+0

所以就像我的產品示例。子類別 - >產品只包含產品的ID? – user1154863 2012-01-18 00:08:56

+0

此外,您何時使用參考,何時使用嵌入? – user1154863 2012-01-18 00:09:21

+0

@ user1154863不,「SubCategory」的'product'屬性將包含「Product」類型的對象。我已經用更多信息更新了我的答案 – Phil 2012-01-18 00:19:56