Доктрина отменяет ассоциации полей?

Я слежу за этим:

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
0
675
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас неправильное сопоставление для вашего класса TypeAssociation, так как он не должен быть Entity. Используйте на нем @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
{

}

Ссылка:

Отмена ассоциации

Другие вопросы по теме