学说2:有没有办法使用yaml或xml从特征继承映射?

时间:2014-10-14 16:50:11

标签: php symfony doctrine-orm doctrine

我发现following example in the doctrine documentation已将地图添加到特征中:

/**
 * Trait class
 */
trait ExampleTrait
{
    /** @Id @Column(type="string") */
    private $id;

    /**
     * @Column(name="trait_foo", type="integer", length=100, nullable=true, unique=true)
     */
    protected $foo;

    /**
     * @OneToOne(targetEntity="Bar", cascade={"persist", "merge"})
     * @JoinColumn(name="example_trait_bar_id", referencedColumnName="id")
     */
    protected $bar;
}

我试图映射一个特征而不必复制继承它的类中的映射。我没有诚实地尝试过这个,因为我当前的项目使用yaml进行映射,但看起来普通的php类在使用特性时也会继承映射。

有没有办法在不使用关联但是使用yaml或xml的情况下继承此特征的映射?我尝试将特性设置为mapped superclass,但它没有用,但我基本上都在寻找相同类型的想法。

感谢。

1 个答案:

答案 0 :(得分:0)

使用YAML声明mappedSupperClass:

Namespace\For\Your\MappingClass:
    type: mappedSuperclass
    fields:
        id:
            id:
                type: integer
                generator:
                    strategy: AUTO

        ... other fields and relations 

用XML声明它:

<?xml version="1.0" encoding="UTF-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
                  http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">

    <mapped-superclass name="Namespace\For\Your\MappingClass">

        <field name="foo" column="foo" type="string" length="255" />

        <field name="bar" column="bar" type="string" length="255" unique="true" />

        ... other fields

    </mapped-superclass>

</doctrine-mapping>

如果你运行app/console doctrine:generate:entities,你将能够在其他实体中使用mappedSuperClass作为优势。