【问题标题】:Doctrine 2 MongoDb ODM referencesDoctrine 2 MongoDb ODM 参考
【发布时间】:2012-01-18 08:22:03
【问题描述】:

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

所以我有一个 EntityA 并且在 EntityA 内我想通过 EntityB 的 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 而不是整个产品?

【问题讨论】:

    标签: php mongodb doctrine-odm


    【解决方案1】:

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

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

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

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

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

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

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

    (假设您定义了适当的 setter 和 getter 方法)


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

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

    【讨论】:

    • 就像在我的产品示例中一样。 SubCategory->product 只包含 Product 的 ID?
    • 还有什么时候使用 Reference,什么时候使用 Embed?
    • @user1154863 不,SubCategory 的product 属性将包含Product 类型的对象。我已经用更多信息更新了我的答案
    猜你喜欢
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    相关资源
    最近更新 更多