gpt4 book ai didi

symfony - Doctrine2 Symfony2 扩展不同包中的实体,但具有相同的数据库表名称

转载 作者:行者123 更新时间:2023-12-02 13:09:08 25 4
gpt4 key购买 nike

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

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

namespace Bundle\Entity\Customer;

/**
* @ORM\Table(name="customer")
* @ORM\Entity()
*/
class Customer implements CustomerInterface, UserInterface
{
//implementing variables and getters/setters
}

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

namespace AnotherBundle\Entity\Customer;

use Bundle\Entity\Customer\Customer as BaseCustomer;

/**
* @ORM\Entity()
*/
class Customer extends BaseCustomer
{
//implementing variables and getters/setters
}

客户界面:

namespace Bundle\Model\Customer;

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

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

resolve_target_entities:
Bundle\Model\Customer\CustomerInterface: AnotherBundle\Entity\Customer\Customer

生成 SQL 时出现以下错误:

[Doctrine\DBAL\Schema\SchemaException]
The table with name 'customer' already exists.

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

我已经尝试过这个来源,但他们无法解决我的问题: Creating portable Bundles with extendable entities in Symfony2 (不起作用,虽然实体确实映射到正确的实体,但它仍然给我重复的表名称错误)

此外,学说的继承映射似乎没有帮助( http://docs.doctrine-project.org/en/latest/reference/inheritance-mapping.html )

我理解这个错误,但是是否应该能够让 2 个实体(彼此扩展)写入同一个数据库表

最佳答案

您的示例中未配置继承。您必须设置single table inheritance做你想做的事:

/**
* @Entity(name="customer")
* @InheritanceType("SINGLE_TABLE")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({"customer1" = "Namespace\To\First\Bundle\Customer", "customer2" = "Namespace\To\Another\Bundle\Customer"})
*/
class Customer implements CustomerInterface, UserInterface
{ ... }

然后,让你的第二个客户类别扩展第一个客户类别,这应该可行。

关于symfony - Doctrine2 Symfony2 扩展不同包中的实体,但具有相同的数据库表名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21120327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com