Doctrine2 Сопоставить сущности с составными внешними ключами в составных первичных ключах
У меня есть модель, которая имеет много таблиц, но в этом случае нам нужно только три.
Дело в том, что составной первичный ключ одного из них также является первым (составной тоже), и Symfony выдает это исключение:
MappingException: невозможно отобразить объектВаш \ SomethingBundle \ Entity \ Empleado» с составным первичным ключом как частью первичного ключа другого объектаВаш \ SomethingBundle \ Entity \ EmpleadoHorario # empleado.
Здесь я объясняю отношения: 1º
Салон, у него есть первичный ключID2º
Empleado, он имеет составной первичный ключID, Salon_id и, также в первичном ключе, приоритетный ключ, ссылающийся на салон:Salon_id3º
EmpleadoHorario: у него есть составной первичный ключFecha, Empleado_id, Salon_id и, также в первичном ключе, два внешних ключа, ссылающихся на салон:Salon_idи Эмплеадо:Empleado_id, Salon_id
У всех отношений есть и обратный союз. Вот код:
Салон Сущность:
/**
* Salon
*
* @ORM\Table(name="salon")
* @ORM\Entity
*/
class Salon
{
/**
* @var string
*
* @ORM\Column(name="id", type="string", length=50, nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
// More fields...
/**
* @var array_collection
*
* @ORM\OneToMany(targetEntity="Empleado", mappedBy="salon")
*/
private $empleados;
/**
* @var array_collection
*
* @ORM\OneToMany(targetEntity="EmpleadoHorario", mappedBy="salon")
*/
private $empleadoHorarios;
// Getters & Setters...
}
Empleado Сущность:
/**
* Empleado
*
* @ORM\Table(name="empleado")
* @ORM\Entity
*/
class Empleado
{
/**
* @var integer
*
* @ORM\Column(name="id", type="bigint", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="NONE")
*/
private $id;
/**
* @var string
*
* @ORM\JoinColumn(name="salon_id", referencedColumnName="id", nullable=false)
* @ORM\ManyToOne(targetEntity="Salon", inversedBy="empleados")
* @ORM\Id
* @ORM\GeneratedValue(strategy="NONE")
*/
private $salon;
// More fields...
/**
* @var array_collection
*
* @ORM\OneToMany(targetEntity="EmpleadoHorario", mappedBy="salon")
*/
private $empleadoHorarios;
// Getters & setters...
}
И наконецEmpleadoHorario Сущность:
/**
* EmpleadoHorario
*
* @ORM\Table(name="empleado_horario")
* @ORM\Entity
*/
class EmpleadoHorario
{
/**
* @var \DateTime
*
* @ORM\Column(name="fecha", type="date", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="NONE")
*/
private $fecha;
/**
* @var string
*
* @ORM\JoinColumn(name="salon_id", referencedColumnName="id", nullable=false)
* @ORM\ManyToOne(targetEntity="Salon", inversedBy="empleadoHorarios")
* @ORM\Id
* @ORM\GeneratedValue(strategy="NONE")
*/
private $salon;
/**
* @var integer
*
* @ORM\ManyToOne(targetEntity="Empleado", inversedBy="empleadoHorarios")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="salon_id", referencedColumnName="salon_id", nullable=false),
* @ORM\JoinColumn(name="empleado_id", referencedColumnName="id", nullable=false)
* })
* @ORM\Id
* @ORM\GeneratedValue(strategy="NONE")
*/
private $empleado;
// More fields...
// Getters & Setters...
}
Как я уже говорил выше, проблема, похоже, заключается вEmpleadoHorario.empleado поле, которое является частью составного первичного ключа, а также составного внешнего ключа.
Другие ответы через StackOverflow.com предлагают наследование карт, но я неЯ даже не знаю, как это работает. Я пытался дважды послечитая это но я не могне решить мою проблему.