2014-06-05 20 views
6

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; 

risposta

6

Dal momento che non ho ricevuto alcuna risposta ancora ho fatto un'altra ricerca oggi e ho trovato la risposta alla mia domanda attraverso il Forum di mailing list di Doctrine. Sembra che ho appena cercato le parole chiave sbagliate ...

Doctrine 2 purtroppo non lo supporta. Che peccato! :(

Dalla documentazione Dottrina: http://doctrine-orm.readthedocs.org/en/latest/reference/limitations-and-known-issues.html#join-columns-with-non-primary-keys

Non è possibile utilizzare unire le colonne che puntano alle chiavi non primarie Dottrina penseranno queste sono le chiavi primarie e creare lazy-caricamento . proxy con i dati, che possono portare a risultati imprevisti Doctrine può, per motivi di prestazioni, non convalidare la correttezza di queste impostazioni in fase di esecuzione ma solo tramite il comando Convalida schema.

domanda simile: Is it possible to reference a column other than 'id' for a JoinColumn?