Symfony 使用不同实体管理器的不同捆绑包中的实体中的问题
编辑: 我准备了一个tar.gz,它一旦解压缩,运行后。/bin/vendors install无法通过phpSymfony 使用不同实体管理器的不同捆绑包中的实体中的问题,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
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时才相互了解,这一概念是否错误?我将上传一个测试用例示例,因此如果您有时间,可以查看一下。非常感谢您的时间,我非常了解如何解决此问题。您可能希望了解以下内容:命令: