Doctrine2 Symfony2扩展实体位于不同的bundle中,但具有相同的数据库表名称



我在扩展symfony2中具有相同数据库表名称的实体时遇到问题。我试图在symfony中扩展一个实体,但基本实体需要是可重用的,所以它不会总是被扩展。

这是我目前拥有的一个简化的例子。我的客户实体:

namespace BundleEntityCustomer;
/**
* @ORMTable(name="customer")
* @ORMEntity()
*/
class Customer implements CustomerInterface, UserInterface
{
//implementing variables and getters/setters
}

扩展实体(在另一个捆绑包中):

namespace AnotherBundleEntityCustomer;
use BundleEntityCustomerCustomer as BaseCustomer;
/**
* @ORMEntity()
*/
class Customer extends BaseCustomer
{
//implementing variables and getters/setters
}

客户界面:

namespace BundleModelCustomer;
interface CustomerInterface
{
// public methods of the first Customer class
}

在我的config.yml中,我有以下规则:

resolve_target_entities:
BundleModelCustomerCustomerInterface: AnotherBundleEntityCustomerCustomer

当生成SQL时,我得到以下错误:

[DoctrineDBALSchemaSchemaException]
The table with name 'customer' already exists.

我需要第二个实体来扩展第一个(基本)实体并维护数据库表名。但当我不扩展第一个(基本)实体时,我仍然希望这个实体自己工作。

我尝试过这个来源,但他们无法解决我的问题:在Symfony2中创建具有可扩展实体的可移植Bundles(不起作用,尽管实体确实映射到了正确的实体,但它仍然给了我重复的表名错误)

此外,学说的固有映射似乎也于事无补(http://docs.doctrine-project.org/en/latest/reference/inheritance-mapping.html)

我理解这个错误,但难道不能让两个实体(相互扩展)写入同一个数据库表吗

您的示例中没有配置继承。您必须设置单表继承才能执行您想要的操作:

/**
* @Entity(name="customer")
* @InheritanceType("SINGLE_TABLE")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({"customer1" = "NamespaceToFirstBundleCustomer", "customer2" = "NamespaceToAnotherBundleCustomer"})
*/
class Customer implements CustomerInterface, UserInterface
{ ... }

然后,让你的第二个客户类扩展第一个,这应该会起作用。

对我来说,最好的方法是忽略dbal级别的第二个实体。将创建表,并且不会出现错误。https://groups.google.com/forum/?fromgroups=#!主题/条令用户/rwWXZ7faPsA

附言:谢谢Marco Pivetta,Alexandru Trandafir Catalin。

相关内容

  • 没有找到相关文章

最新更新