0

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

所以我有一个EntityA并且在EntityA 中我想通过EntityBObjectId引用EntityB。因此,在EntityA中,我有一个带有以下 Docblock的变量A: @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;

}

现在我如何只存储产品的 id 而不是整个产品subCategory->product

4

1 回答 1

1

这就是 ODM 的工作方式。在对象方面,您将一个整体添加ProductSubCategory.

您的 Mongo 数据库将仅存储参考,例如(在您的Subcategory项目中)

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

要创建关系,您只需将您的设置ProductSubCategory,例如

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

要从中获取ProductID SubCategory,您只需使用

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

(假设您定义了适当的settergetter方法)


当您想要创建与独立文档的关系时,您可以使用参考。当您可能希望从许多其他文档(例如您的SubCategories )链接到一个文档(例如您的Product )时,尤其如此。

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

于 2012-01-17T23:56:16.730 回答