Отображение ORM доктрины 2 и ODM MongoDB в одном классе - PullRequest
2 голосов
/ 10 октября 2011

Можно ли сопоставить один и тот же класс с ORM и ODM, используя аннотации?

Мы решаем, что использовать, поэтому мы хотим провести некоторое измерение производительности, а также хотим иметь возможность легко переключать средства отображения устойчивости.Я уже сделал объединение менеджера, теперь я хотел бы объединить классы.Теперь у меня есть копия каждого класса в отдельных пространствах имен для сущностей и документов, которые я нахожу излишними.

Я читаю эту статью http://www.doctrine -project.org / docs / mongodb_odm / 1.0 / en/cookbook/mapping-classes-to-orm-and-odm.html, но, в конце концов, я предполагаю, что они используют два разных класса, каждый в своем собственном пространстве имен.

Кто-нибудь пробовал это?

Ответы [ 3 ]

0 голосов
/ 22 марта 2015

Не пробовал раньше, но если бы я мог предложить что-то, чтобы было другое отображение в xml / yml для вашего класса сущности / документа?

0 голосов
/ 23 ноября 2016

Да, вы можете.Я сделал это, используя 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
0 голосов
/ 12 февраля 2012

Я никогда не пробовал, но вполне возможно поместить отображение ODM и ORM в один и тот же класс.

Возможно, проблема будет заключаться в синхронизации данных между этими двумя постоянными бэкэндами. и Entity API. Например, если у вас есть связь ManyToOne, ODM будет иметь другую внутреннюю ссылку в памяти, чем ORM. Поэтому возможно, что он переопределит объекты, с которыми вы работали.

...