наследование таблиц классов с переопределением атрибута - PullRequest
0 голосов
/ 18 января 2019

у меня 3 стола

  • блок
  • организация расширяет подразделение
  • секция удлиняет единицу

Теперь я хочу использовать наследование таблиц классов для этого с доктриной. Но столбцы соединения не называются одинаково. Столбец id в таблице юнитов - это uni_id, в организации - org_id, а в разделе - sec_id.

Я пытался решить эту проблему с помощью переопределения ассоциации и переопределения атрибута, как описано в https://www.doctrine -project.org / projects / doctrine-orm / en / latest / reference / наследование-mapping.html

Кажется, что переопределение атрибута переименовывает оба идентификатора родителя в дочерний, это не то, что я хотел. Поэтому я думаю, что мне следует применить отмену ассоциации, но она не работает.

/**
 *
 * @ORM\Entity
 * @ORM\Table(name="unit")
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="uni_type_cd", type="string")
 * @ORM\DiscriminatorMap({"organisation" = "Organisation", "section" = "Section"})
 */
abstract class Unit {
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(name="uni_id")
     * @var int
     */
    protected $id;


/**
 *
 * @ORM\Entity
 * @ORM\Table(name="organisation")
 */
class Organisation extends Unit {

}

Я также пытался добавить это в организацию:

    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(name="org_id")
     * @var int
     */
    protected $id;

А я пытаюсь использовать AssociationOverride

/**
 *
 * @ORM\Entity
 * @ORM\Table(name="organisation")
 * @ORM\AssociationOverrides({
 *      @ORM\AssociationOverride(name="id",
 *          joinColumns=@ORM\JoinColumn(
 *              name="org_id", referencedColumnName="uni_id"
 *          )
 *      )
 * })
 *
 */
class Organisation extends Unit {

В этом последнем фрагменте кода я использовал все виды @ORM \ AssociationOverride (name =

Как и id, Id, uni_id, но я продолжаю получать ошибки, такие как: MappingException: недопустимое переопределение поля с именем 'id' для класса Organization.

Я ожидаю, что смогу получить необходимую Организацию или Секцию из Репозитория. И пусть эти таблицы присоединяются к расширенной таблице.

...