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;Источники
- https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/tutorials/embeddables.html#initializing-embeddables
- Log in to post comments
- 4500 reads