【问题标题】:Doctrine 2 ORM and MongoDB ODM mapping on the same class同一类上的 Doctrine 2 ORM 和 MongoDB ODM 映射
【发布时间】:2011-12-04 08:50:31
【问题描述】:
【问题讨论】:
标签:
orm
mongodb
doctrine-orm
odm
【解决方案1】:
我从未尝试过,但完全可以将 ODM 和 ORM 映射放在完全相同的类上。
问题可能取决于这两个持久性后端之间的数据同步
和实体 API。例如,如果您有一个 ManyToOne 关联,ODM 将具有与 ORM 不同的内部内存引用。因此它可能会覆盖您正在使用的对象。
【解决方案2】:
之前没有尝试过,但如果我可以建议在 xml/yml 中为您的实体/文档类有不同的映射?
【解决方案3】:
是的,你可以。我已经使用 symfony 和注释完成了它,所以我想你可以使用你正在使用的任何环境来管理。
首先,我在实体上添加了两个注释:
<?php
use Doctrine\ORM\Mapping as ORM;
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
/**
* User
*
* @ORM\Entity
* @ODM\Document
*/
class User
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ODM\Field()
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="email", type="string", length=200, nullable=false)
* @ODM\Field()
*/
private $email;
}
在 symfony 下,ORM 的默认目录是 Entity 目录,而 ODM 的默认目录是 Document。因此,如果您有一个必须同时是文档的实体,则必须手动配置这两个映射中的任何一个。
doctrine_mongodb:
document_managers:
default:
mappings:
# Default mapping for the bundle (loads Document/)
DemoBundle: ~
# Extra mapping to load document mappings under Entity/
DualMappingHack:
type: annotation
dir: %kernel.root_dir%/../src/Acme/DemoBundle/Entity
prefix: EntityPrefix
is_bundle: false