我在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而不是整个产品?
答案 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 )链接到一个文档(例如产品),则尤其如此。
当您只希望该文档作为其父文档的一部分时,将使用嵌入文档。