domanda di base:Doctrine 2 mappatura riferimento unico tasto
E 'possibile mappare un'associazione utilizzando Doctrine riferimento non un primario, ma solo una chiave univoca?
Extended Version:
Ho un Entity (Participation
), che può riferimento 2 altri enti (DropoutCause
e DischargeType
). A seconda di questa combinazione sono impliciti altri attributi, basati su un'altra (4) tabella (DropoutScenario
) nel database. Poiché entrambe le entità referenziate potrebbero essere nulle, non potrei dichiararle come chiave primaria ma unica nella quarta tabella.
Il problema è che solo un errore quando provo a tracciare questo con Doctrine:
valore mancante per primaria id chiave sulla Application \ Entity \ Training \ DropoutScenario
Am I fare qualcosa di sbagliato o semplicemente non è possibile con Doctrine? In caso contrario, c'è una soluzione migliore su come potrei fare questo?
ho cercato per molto tempo e scavato la documentazione Dottrina ma io semplicemente non ho trovato nulla su questo ...
esempi di codice spogliato dei miei mappature sono al di sotto.
Partecipazione:
<?php
namespace Application\Entity\Trainings;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\MappedSuperclass
*/
abstract class Participation {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Application\Entity\DropoutCause")
* @ORM\JoinColumn(name="dropout_cause_id", referencedColumnName="id"))
*/
protected $dropoutCause;
/**
* @ORM\ManyToOne(targetEntity="Application\Entity\DischargeType")
* @ORM\JoinColumn(name="discharge_id", referencedColumnName="id"))
*/
protected $dischargeType;
/**
* @ORM\ManyToOne(targetEntity="DropoutScenario")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="discharge_id", referencedColumnName="discharge_id"),
* @ORM\JoinColumn(name="dropout_cause_id", referencedColumnName="dropout_cause_id")
* })
*/
private $scenario;
DropoutScenario:
<?php
namespace Application\Entity\Trainings;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="training_dropout_scenarios")
*/
class DropoutScenario {
/**
* @var int
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Application\Entity\DropoutCause")
* @ORM\JoinColumn(name="dropout_cause_id", referencedColumnName="id"))
*/
protected $dropoutCause;
/**
* @ORM\ManyToOne(targetEntity="Application\Entity\DischargeType")
* @ORM\JoinColumn(name="discharge_id", referencedColumnName="id"))
*/
protected $dischargeType;
/** @ORM\Column(type="integer", name="dropout_cause_id") */
protected $dropoutCauseId;
/** @ORM\Column(type="integer", name="discharge_id") */
protected $dischargeTypeId;