doctrine -- Ошибка Duplicate definition of column "..." on entity "..." in a field or discriminator column mapping.
Primary tabs
Ошибка
Duplicate definition of column "value" on entity "App\Entity\Comission" in a field or discriminator column mapping.
Данная ошибка появлялась у меня при попытке сгенерировать миграции по аннотациям сущности:
<?php namespace App\Entity; use App\Entity\VO\Status\ComissionStatus; use App\Entity\VO\ComissionType; use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping\Embedded; /** * @ORM\Entity(repositoryClass="App\Repository\ComissionRepository") * @ORM\Table(name="comission") */ class Comission { /** * @var int * * @ORM\Column(type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="SEQUENCE") * @ORM\SequenceGenerator(sequenceName="comission_pkey") */ private $id; /** * @ORM\Column(type="string", length=255) */ private $outerId; /** * @ORM\Column(type="datetime") */ private $date; /** * @ORM\Column(type="integer") */ private $sum; /** * @var Sale * * @ORM\OneToOne(targetEntity="Sale") * @ORM\JoinColumn(name="sale_id", referencedColumnName="id", onDelete="CASCADE") */ private $sale; /** * @var ComissionStatus * * @Embedded(class = "App\Entity\VO\Status\ComissionStatus", columnPrefix = false) */ private $status; /** * @var ComissionType * * @Embedded(class = "App\Entity\VO\ComissionType", columnPrefix = false) */ private $comissionType; public function __construct() { $this->status = new ComissionStatus(); $this->comissionType = new ComissionType(); }
Решение
Проблема возникала в результате некорректного использования аннотации @Embedded. Вернее, использована она была верно, но применялась дважды, и оба раза к объектам, чьё поле называлось value.
Соответственно, doctrine пыталась создать таблицу, в которой дважды появлялось поле value, поэтому выдавала ошибку дублирования.
Чтобы избавиться от этой проблемы, дадим новым полям префиксы:
/** * @var ComissionStatus * * @Embedded(class = "App\Entity\VO\Status\ComissionStatus", columnPrefix = "status_") */ private $status; /** * @var ComissionType * * @Embedded(class = "App\Entity\VO\ComissionType", columnPrefix = "type_") */ private $comissionType;
Источники
- Log in to post comments
- 3870 reads