1

我正在关注这个:

https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/tutorials/override-field-association-mappings-in-subclasses.html#override-field-association-mappings-in-subclasses

这是我的代码:

<?php

namespace App\Entity\Type;

use Doctrine\ORM\Mapping AS ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="attr")
 */
class TypeAssociation 
{

    /**
     * @ORM\ManyToOne(
     *     targetEntity="App\Entity\Attr",
     *     inversedBy="associationValues",
     *     cascade={"persist"}
     * )
     * @ORM\JoinColumn(name="attr_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")
     */
    protected $attr;

}

/**
 * @ORM\Entity
 * @ORM\Table(name="attr_super")
 *
 * @ORM\AssociationOverrides({
 *      @ORM\AssociationOverride(name="attr",
 *          joinColumns=@ORM\JoinColumn(
 *              name="attr_id2", referencedColumnName="id", nullable=false
 *          )
 *      )
 * })
 */
class TypeAssociationBridge extends TypeAssociation
{

}

它正在按预期创建第二个表,但未创建覆盖字段 - 我做错了什么或不理解此功能?

我正在使用 Doctrine ORM v2.6.2 - Symfony 4.1.6

4

1 回答 1

0

您的TypeAssociation班级映射错误,因为它不应该是实体。使用@ORM\MappedSuperclass而不是@ORM\Entity它:

类型关联

/**
 * @ORM\MappedSuperclass
 */
class TypeAssociation
{
    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Attr")
     * @ORM\JoinColumn(name="attr_id", referencedColumnName="id")
     */
    protected $attr;
}

类型关联桥

/**
 * @ORM\Entity
 * @ORM\Table(name="attr_super")
 *
 * @ORM\AssociationOverrides({
 *      @ORM\AssociationOverride(name="attr",
 *          joinColumns=@ORM\JoinColumn(
 *              name="attr_id2", referencedColumnName="id"
 *          )
 *      )
 * })
 */
class TypeAssociationBridge extends TypeAssociation
{

}

参考:

关联覆盖

于 2018-10-20T12:44:41.770 回答