Doctrine2 Mapuje elementy za pomocą złożonych kluczy obcych w złożonych kluczach podstawowych
Mam model, który ma wiele tabel, ale w tym przypadku potrzebujemy tylko trzech.
Chodzi o to, że złożony klucz podstawowy jednego jest również kluczem wstępnym (również kompozytowym) i Symfony zgłasza ten wyjątek:
MappingException: Nie można mapować obiektu„Twoje coś z grupy” z złożonym kluczem podstawowym jako częścią klucza podstawowego innej jednostki„Twoje coś w zbiorach” Horeario # empleado ”.
Tutaj wyjaśniam związek:
Salon 1º, ma klucz podstawowyID
2º Empleado, ma złożony klucz podstawowyID, Salon_id a także w kluczu podstawowym kluczem odniesienia do Salon:Salon_id
3º EmpleadoHorario: ma złożony klucz podstawowyFecha, Empleado_id, Salon_id a także w kluczu podstawowym dwa kluczowe klucze odnoszące się do Salonu:Salon_idi Empleado:Empleado_id, Salon_id
Wszystkie stosunki mają również odwrotny związek. Oto kod:
TheSalon Jednostka:
/**
* 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...
}
TheEmpleado Jednostka:
/**
* 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...
}
I wreszcieEmpleadoHorario Jednostka:
/**
* 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...
}
Jak powiedziałem powyżej, problem wydaje się być wEmpleadoHorario.empleado pole, które jest częścią złożonego klucza podstawowego, a także złożonego klucza wstępnego.
Inne odpowiedzi w StackOverflow.com sugerują dziedziczenie mapowania, ale nawet nie wiem, jak to działa. Próbowałem dwa razy poczytając to ale nie mogłem rozwiązać mojego problemu.