2014-06-05 4 views
6

बुनियादी सवाल:सिद्धांत 2 मानचित्रण संदर्भित अद्वितीय कुंजी

क्या यह संभव है का उपयोग करते हुए एक संघ मैप करने के लिए सिद्धांत एक प्राथमिक नहीं है, लेकिन केवल एक अद्वितीय कुंजी को संदर्भित?

विस्तारित संस्करण:

मैं एक इकाई (Participation) है जो मई संदर्भ 2 अन्य संस्थाओं (DropoutCause और DischargeType)। इस संयोजन के आधार पर डेटाबेस में किसी अन्य (4 वें) तालिका (DropoutScenario) के आधार पर कुछ अन्य विशेषताओं को शामिल किया गया है। क्योंकि दोनों संदर्भित इकाइयों में से कोई भी शून्य हो सकता है क्योंकि मैं उन्हें प्राथमिक के रूप में घोषित नहीं कर सकता था लेकिन चौथी तालिका में केवल अद्वितीय कुंजी थी।

समस्या जब मैं सिद्धांत के साथ इस मैप करने के लिए कोशिश मैं सिर्फ एक त्रुटि प्राप्त है:

पर आवेदन \ इकाई \ प्रशिक्षण \ प्राथमिक कुंजी आईडी के लिए

अनुपलब्ध मान DropoutScenario

एम आई कुछ गलत कर रहा है, या यह सिद्धांत के साथ बस इतना संभव नहीं है? यदि नहीं, तो क्या कोई बेहतर समाधान है कि मैं यह कैसे कर सकता हूं?

मैं अब काफी समय के लिए खोज कर दिया गया है और सिद्धांत प्रलेखन खोदा, लेकिन मैं तो बस इस पर कुछ भी नहीं मिला ...

मेरी मैपिंग की Stripped कोड नमूने नीचे हैं।

भागीदारी:

<?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; 

उत्तर

6

जब से मैं किसी भी सवाल का जवाब अभी तक नहीं मिला मैं आज एक और शोध किया और मैं के माध्यम से अपने खुद के सवाल का जवाब मिल गया सिद्धांत मेलिंग सूचियों मंच। ऐसा लगता है कि मैंने अभी गलत कीवर्ड की खोज की है ...

सिद्धांत 2 दुर्भाग्यवश इसका समर्थन नहीं करता है। अफ़सोस की बात है! :(

सिद्धांत प्रलेखन से: http://doctrine-orm.readthedocs.org/en/latest/reference/limitations-and-known-issues.html#join-columns-with-non-primary-keys

यह गैर प्राथमिक कुंजी की ओर इशारा करते कॉलम में शामिल होने का उपयोग करने के सिद्धांत इन प्राथमिक चाबियाँ हैं लगता है और आलसी लोडिंग पैदा करेगा संभव नहीं है। डेटा के साथ प्रॉक्सी, जो अप्रत्याशित परिणामों का कारण बन सकता है। सिद्धांत प्रदर्शन कारणों से रनटाइम पर सेटिंग्स की शुद्धता को सत्यापित नहीं कर सकता है, बल्कि केवल वैध स्कीमा कमांड के माध्यम से।

इसी प्रकार के प्रश्न: Is it possible to reference a column other than 'id' for a JoinColumn?

संबंधित मुद्दे