2012-01-17 74 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