Doctrine 2 MongoDb ODM参考文献

时间:2012-01-17 20:59:36

标签: php mongodb doctrine-odm

我在php中有一个与Doctrine 2 MongoDB ODM相关的问题。

所以我有一个 EntityA ,在 EntityA 中我想通过 EntityB 来引用 EntityB 的ObjectId 即可。所以在 EntityA 中我有一个带有以下Docblock的 variableA @ODM \ ReferenceOne(targetDocument =“EntityB”,simple =“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 个答案:

答案 0 :(得分:1)

这就是ODM的工作原理。在对象方面,您将整个Product添加到SubCategory

您的Mongo数据库仅存储引用,例如(在您的Subcategory项目中)

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

要创建关系,只需将Product设置为SubCategory,例如

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

要从Product获取SubCategory ID,您只需使用

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

(假设您已定义相应的 setter getter 方法)


如果要创建与独立文档的关系,请使用引用。如果您想要从许多其他文档(例如 SubCategories )链接到一个文档(例如产品),则尤其如此。

当您只希望该文档作为其父文档的一部分时,将使用嵌入文档。