Symfony 使用不同实体管理器的不同捆绑包中的实体中的问题

Symfony 使用不同实体管理器的不同捆绑包中的实体中的问题,symfony,doctrine,doctrine-orm,Symfony,Doctrine,Doctrine Orm,编辑: 我准备了一个tar.gz,它一旦解压缩,运行后。/bin/vendors install无法通过phpscripts/createAll.php加载装置。在tar.gz中,有2个包使用2个不同的连接,每个人都有自己的数据库 我认为Symfony2无法正确管理它们。如果您查看scripts/createAll.php,就会看到symfony如何无法加载这两个fixture,但是如果您删除了一个随机fixture(无论是Var.php还是Foo.php,一切都正常运行,在我看来,symfon

编辑:

我准备了一个tar.gz,它一旦解压缩,运行后。/bin/vendors install无法通过php
scripts/createAll.php
加载装置。在tar.gz中,有2个包使用2个不同的连接,每个人都有自己的数据库

我认为Symfony2无法正确管理它们。如果您查看scripts/createAll.php,就会看到symfony如何无法加载这两个fixture,但是如果您删除了一个随机fixture(无论是Var.php还是Foo.php,一切都正常运行,在我看来,symfony无法正确管理实体)

链接:

我想告诉
Symfony2
为不同的
捆绑使用不同的
实体管理器
目录
因此我的config.yml看起来像:

orm:
    auto_generate_proxy_classes: %kernel.debug%
    default_entity_manager:   default
    entity_managers:
        default:
            connection: default
            mappings:
                myVendorURLCoreBundle: ~
                myVendormyBundleBundle: ~
                myVendormyBundleFooBundle:
                    prefix: "myVendor\myBundleFooBundle\Entity"
                    type: annotation
                    is_bundle: true
                    dir: "/Entity"
        formacions:
            connection: formacions
            mappings:
                myVendormyBundleFooBarBundle:
                    prefix: "myVendor\myBundleFooBarBundle\View"
                    type: annotation
                    is_bundle: false
                    dir: "%kernel.root_dir%/../src/myVendor/myBundleFooBarBundle/View"
问题是,当使用不同目录中实体之间的关系时,我得到以下错误,这是由第142行的
vendor/doctor/lib/doctor/ORM/MappingException.php引起的

类FRJPC\SalleUrlFormacionsBundle\Entity\SpecialistaContingut是 不是有效的实体或映射的超类

问题是,有时供应商名称前的“\”会破坏名称空间。真奇怪

以下是我如何将实体相互链接:

namespace myVendor\myBundleFooBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity( repositoryClass="myVendor\myBundleFooBundle\Repository\ARepository" ) * @ORM\ChangeTrackingPolicy( "DEFERRED_EXPLICIT" ) * @ORM\Table( name="a" ) */ class A { /** * @ORM\Id * @ORM\Column( type="integer", length="4" ) * @ORM\GeneratedValue( strategy="AUTO" ) */ private $id; /** * @ORM\ManyToOne( targetEntity="\myVendor\myBundleFooBarBundle\Entity\B", inversedBy="a", cascade={"persist"} ) * @ORM\JoinColumn( name="FooBar", nullable=true, referencedColumnName="FooBar", onDelete="CASCADE" ) */ private $fooBar; } 名称空间myVendor\MyBundleFobundle\Entity; 使用条令\ORM\Mapping作为ORM; /** *@ORM\Entity(repositoryClass=“myVendor\mybundlefobundle\Repository\ARepository”) *@ORM\ChangeTrackingPolicy(“延迟的\u显式”) *@ORM\Table(name=“a”) */ 甲级 { /** *@ORM\Id *@ORM\Column(type=“integer”,length=“4”) *@ORM\GeneratedValue(strategy=“AUTO”) */ 私人$id; /** *@ORM\ManyToOne(targetEntity=“\myVendor\mybundlefobarbundle\Entity\B”,inversedBy=“a”,cascade={“persist”}) *@ORM\JoinColumn(name=“FooBar”,nullable=true,referencedColumnName=“FooBar”,onDelete=“CASCADE”) */ 私人$fooBar; } 第二实体:

namespace myVendor\myBundleFooBarBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity( repositoryClass="myVendor\myBundleFooBarBundle\Repository\ARepository" ) * @ORM\ChangeTrackingPolicy( "DEFERRED_EXPLICIT" ) * @ORM\Table( name="a" ) */ class B { /** * @ORM\Id * @ORM\Column( type="integer", length="4" ) * @ORM\GeneratedValue( strategy="AUTO" ) */ private $id; /** @ORM\OneToMany( targetEntity="\myVendor\myBundleFooBundle\Entity\EspecialitatContingut", mappedBy="fooBar" ) */ private $a; } 名称空间myVendor\mybundlefobarbundle\Entity; 使用条令\ORM\Mapping作为ORM; /** *@ORM\Entity(repositoryClass=“myVendor\mybundlefobarbundle\Repository\ARepository”) *@ORM\ChangeTrackingPolicy(“延迟的\u显式”) *@ORM\Table(name=“a”) */ B类 { /** *@ORM\Id *@ORM\Column(type=“integer”,length=“4”) *@ORM\GeneratedValue(strategy=“AUTO”) */ 私人$id; /**@ORM\OneToMany(targetEntity=“\myVendor\mybundlefobundle\Entity\specialitatcontingut”,mappedBy=“fooBar”)*/ 私家车$a; } 有人知道我应该如何链接每个实体吗


PD:当两个实体在同一个捆绑包和同一个目录中时,它们的工作方式都很有魅力。

所有这些foo和bar加上一条带有真实名称的错误消息,让人有点难以理解,并留下了发布的代码与实际代码不匹配的可能性。FooBarBundle/视图似乎不太可能存储实体

在任何情况下,给定的实体经理(如formacions)都需要能够看到所有相关实体,包括关系中涉及的实体。看起来你在foo包中定义了A,在bar包中定义了B,它们都互相引用了

从您的配置中,我看不到formacion em如何看到您的A实体,同样,我也看不到默认em如何看到B实体。关系中的完全限定类名不足以共享实体元数据。因此出现了错误消息


我真的很高兴被证明是错的。不能做这类事情有点令人沮丧。

所有这些foo和bar加上带有真实姓名的错误消息,让人有点难以理解,并留下了发布的代码与实际代码不匹配的可能性。FooBarBundle/视图似乎不太可能存储实体

在任何情况下,给定的实体经理(如formacions)都需要能够看到所有相关实体,包括关系中涉及的实体。看起来你在foo包中定义了A,在bar包中定义了B,它们都互相引用了

从您的配置中,我看不到formacion em如何看到您的A实体,同样,我也看不到默认em如何看到B实体。关系中的完全限定类名不足以共享实体元数据。因此出现了错误消息


我真的很高兴被证明是错的。不能做这类事情有点令人沮丧。

非常感谢你的回答。据我所知,在confyg.yml中,我定义了由不同bundle使用的不同实体管理器,这些实体管理器仅在关系中使用FQDN时才相互了解,这一概念是否错误?我将上传一个测试用例示例,因此如果您有时间,可以查看一下。非常感谢您的时间,我非常了解如何解决此问题。您可能希望了解以下内容:command:app/console原则:mapping:info--em entitymanager name可以让您了解给定实体管理器可以看到的内容。非常感谢您的回答。我确实知道pp/console原则:mapping:info--em='foo'命令,但不知道它有什么帮助。我认为symfony在管理多个连接时会遇到一些问题,因为实体很好,夹具也很好,并且当只有一个夹具存在时,可以毫无问题地加载它们。非常感谢您的回答。据我所知,在confyg.yml中,我定义了由不同bundle使用的不同实体管理器,这些实体管理器仅在关系中使用FQDN时才相互了解,这一概念是否错误?我将上传一个测试用例示例,因此如果您有时间,可以查看一下。非常感谢您的时间,我非常了解如何解决此问题。您可能希望了解以下内容:命令: