在另一个EntityManager中保持实体与关系

时间:2012-03-12 09:59:37

标签: symfony doctrine-orm

我有几个EntityManagers声明如下:

doctrine:
dbal:
    default_connection:       default
    connections:
        default:
            driver:   %db_default_driver%
            host:     %db_default_host%
            port:     %db_default_port%
            dbname:   %db_default_name%
            user:     %db_default_user%
            password: %db_default_password%
            charset:  UTF8
        sync:
            driver:   %db_solarsync_driver%
            host:     %db_solarsync_host%
            port:     %db_solarsync_port%
            dbname:   %db_solarsync_name%
            user:     %db_solarsync_user%
            password: %db_solarsync_password%
            charset:  UTF8
        master:
            driver:   %db_master_driver%
            host:     %db_master_host%
            port:     %db_master_port%
            dbname:   %db_master_name%
            user:     %db_master_user%
            password: %db_master_password%
            charset:  UTF8

orm:
    auto_generate_proxy_classes: %kernel.debug%
    default_entity_manager:   default
    entity_managers:
        default:
            connection:       default
            mappings:
                FOSUserBundle: ~
                SolarWebUserBundle: ~
                SolarWebSolarSalesBundle: ~
                SolarWebSolarAdminBundle: ~
        sync:
            connection:       sync
            mappings:
                FOSUserBundle: ~
                SolarWebUserBundle: ~
                SolarWebSolarSalesBundle: ~
                SolarWebSolarAdminBundle: ~
                SolarWebSolarSyncBundle: ~
        master:
            connection:       master
            mappings:
                FOSUserBundle: ~
                SolarWebUserBundle: ~
                SolarWebSolarSalesBundle: ~
                SolarWebSolarAdminBundle: ~

每个连接代表一个数据库。

和“Devis”实体。与DevisDonnesTranches和DevisOptions有2个OneToOne关系。 在Devis.php

中声明如下
    /**
 * @ORM\OneToOne(targetEntity="SolarWeb\SolarSalesBundle\Entity\DevisDonneesTranches")
 * @ORM\JoinColumn(name="donnees_tranches_id", referencedColumnName="id", onDelete="CASCADE")
 */
protected $donnees_tranches;

/**
 * @ORM\OneToOne(targetEntity="SolarWeb\SolarSalesBundle\Entity\DevisOptions")
 * @ORM\JoinColumn(name="options_id", referencedColumnName="id", onDelete="CASCADE")
 */
protected $options;

出于复制目的,我必须从'sync'获取Devis及其关系,并将它们保存在'master'中。 但是当我这样做时,我得到了一个

Notice: Undefined index: 000000005846b3b000000000cfe7c32f in /srv/http/vendor/doctrine/lib/Doctrine/ORM/UnitOfWork.php line 2219 

我认为这是因为OneToOne关系。因为当我$ devis-> setDevisOptions(null)和$ devis-> setDevisDonneesTranches(null)时,Devis会持久保存在'master'中。但没有任何关系。

所以我试图在'master'中坚持DevisOptions和DevisDonneesTranches,我得到了一个

Class Proxies\SolarWebSolarSalesBundleEntityDevisOptionsProxy is not a valid entity or mapped super class. 

所以,我想在尝试将实体从实体管理器持久化到另一个实体管理器时,我错过了关于EntityManagers的一些观点。 这样做有什么建议甚至是好的做法吗?

谢谢。

0 个答案:

没有答案