Symfony 从ODM(文档,MongoDB)中引用ORM(实体),并具有多个关系
我试图在symfony2.6中结合ODM(MongoDB)和ORM,并参考文档 我有两个实体,Symfony 从ODM(文档,MongoDB)中引用ORM(实体),并具有多个关系,symfony,orm,doctrine,mapping,doctrine-odm,Symfony,Orm,Doctrine,Mapping,Doctrine Odm,我试图在symfony2.6中结合ODM(MongoDB)和ORM,并参考文档 我有两个实体,User和Category。我还有一个文档产品 很明显,当混合ODM和ORM时,它可以通过一种情况或多种情况轻松解决-一方面我们定义引用一个链接+两个field指定identifier=“fieldId”和fieldId本身,另一方面我们定义ReferenceMany) 我的挑战是让$product->categories填充多个关系。到目前为止,当填写$product->userId时,$produc
User
和Category
。我还有一个文档产品
很明显,当混合ODM和ORM时,它可以通过一种情况或多种情况轻松解决-一方面我们定义引用一个链接+两个field
指定identifier=“fieldId”
和fieldId
本身,另一方面我们定义ReferenceMany)
我的挑战是让$product->categories
填充多个关系。到目前为止,当填写$product->userId
时,$product->user
被正常检索。但是我不能用$product->categories
实现同样的效果
你能帮我找到解决办法吗
/**
* @ORM\Entity
* @ORM\Table(name="users")
*/
class User
{
/**
* @var ArrayCollection $products
*
* @Gedmo\ReferenceMany(type="document", class="Document\Product", mappedBy="user")
*/
protected $products;
}
/**
* @Gedmo\Tree(type="nested")
* @ORM\Entity
* @ORM\Table(name="categories")
*/
class Category
{
/**
* @var ArrayCollection $products
*
* @Gedmo\ReferenceMany(type="document", class="Document\Product", mappedBy="products")
*/
protected $products;
}
然后我有一份文件
/**
* @MongoDB\Document
* @MongoDB\HasLifecycleCallbacks
*/
class Product
{
/**
* @Gedmo\ReferenceOne(type="entity", class="Entity\User", inversedBy="products", identifier="userId")
*/
protected $user;
/**
* @MongoDB\Field(name="user_id", type="int")
*/
protected $userId;
/**
* @Gedmo\ReferenceMany(type="entity", class="Entity\Category", mappedBy="products")
*/
protected $categories = array();
/**
* @MongoDB\Collection
*/
protected $categoryIds = array();
public function getUser()
{
return $this->user;
}
public function getCategories()
{
return $this->categories;
}
}
p.S>侦听器gedmo.listener.reference
和utils.listener.reference
确实存在。条令提供了该用例的实际文档:
它基本上是一个手动实现的学说的参考模型。简而言之:您将一个id(或id列表)存储在一个属性中,该属性通过条令进行映射和持久化
然后在加载过程中(通过事件侦听器或方法注释),获取相应的文档并将它们存储在单独的属性中。然后在刷新过程中(通过事件侦听器或方法注释),获取(可能已更改)对象的id并将其放回第一个属性中
多年来,我们一直在我们的核心产品中使用这种方法的稍加修改的版本,它工作良好,没有任何问题,而且非常透明
更奇怪的是:也可以(从长远来看更难但更方便)为此构建一个自定义的条令类型。到目前为止,我不得不使用存储在文档中的CategoryId数组引入加载类别的自定义解决方案。对于持久化也是一样,我正在PrePersist上更新Ids数组。但仍然在寻找一个优雅的解决方案。我在我的原始帖子中没有提到这一点,但实际上我指的是现有的文档“混合了ORM和MongoDB ODM”。这就是为什么我以“我正在尝试混合…”开始我的信息,我将把它添加到我原来的帖子中。我正在使用“categoryIds”属性并通过自定义EventSubscriber订阅事件。但我希望有另一种方法,就像教条所做的那样。好吧,正如我所提到的,你可以通过定制的方式来实现