多くのテーブルを持つモデルがありますが、この場合は 3 つしか必要ありません。
要点は、1 つの複合主キーが外部キーでもあり (複合キーでもあり)、Symfony がこの例外をスローすることです。
MappingException: エンティティ'Your\SomethingBundle\Entity\Empleado'を別のエンティティ'Your\SomethingBundle\Entity\EmpleadoHorario#empleado'の主キーの一部として複合主キーにマップすることはできません。
ここで私は関係を説明します:
1ºサロン、主キーIDを持っています
2º Empleado には、複合主キーID である Salon_idがあり、主キーにも Salon を参照する外部キー Salon_id があります。
3º EmpleadoHorario: 複合主キーFecha、Empleado_id、Salon_idがあり、主キーにも Salon: Salon_idと Empleado: Empleado_id, Salon_idを参照する 2 つの外部キーがあります。
すべての関係には逆結合もあります。コードは次のとおりです。
サロンエンティティ:
/**
* 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
*
* @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 の他の回答では、マッピングの継承が提案されていますが、それがどのように機能するかさえわかりません。これを読んだ後、2回試しました が、問題を解決できませんでした。