2011-10-10 83 views
2

是否可以使用註釋將同一類映射到ORM和ODM?Doctrine 2在同一類上的ORM和MongoDB ODM映射

我們正在決定使用什麼,所以我們想要做一些性能測量,我們也希望能夠輕鬆地切換持久性映射器。我已經完成了經理統一,現在我想統一課程。現在我有一個單獨的名稱空間中的每個類的實體和文檔的副本,我發現有點多餘。

我讀過這篇文章http://www.doctrine-project.org/docs/mongodb_odm/1.0/en/cookbook/mapping-classes-to-orm-and-odm.html,但最終我猜他們使用了兩個不同的類,每個類都在它們自己的命名空間中。

有沒有人試過這個?

回答

0

我從來沒有嘗試過,但是完全可以將ODM和ORM映射放在同一個類上。

該問題可能依賴於這兩個持久性後端 與實體API之間的數據同步。例如,如果您有一個ManyToOne關聯,則ODM在內存引用中的內部位置與ORM的內部位置不同。所以它可能會覆蓋你正在使用的對象。

0

以前沒有嘗試過,但如果我能建議的東西是有不同的映射在xml/yml爲您的實體/文檔類?

0

是的,你可以。我使用symfony和annotations來完成它,所以我想你可以使用你使用的任何環境來管理。

首先,我添加的實體都註釋:

<?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的默認目錄爲實體目錄,ODM的默認目錄是文件。因此,如果您的實體必須同時是文檔,則必須手動配置兩個映射中的任何一個。

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