2011-08-03 4 views
7

कहें कि मेरे पास एक प्रस्ताव है, जिसमें 1-एन रेंज हो सकती है। तत्काल आप सोचते हैं, "रेंज के अंदर एक offer_id डालें"।Doctrine2 के साथ समग्र कुंजी इकाइयों पर एसोसिएशन से कैसे निपटें?

लेकिन मेरे प्रस्ताव में एक समग्र प्राथमिक कुंजी है (दो फ़ील्ड से बना है)। कोई ऑटोमेशन कोड कॉलम नहीं है।

Doctrine2 प्रलेखन कि विशेष मामले के बारे में ज्यादा नहीं कहना है, यहाँ मेरी संस्थाओं है:

<?php 
use Doctrine\ORM\Mapping as ORM; 
/** 
* @ORM\Table() 
* @ORM\Entity 
*/ 
class Offer 
{ 
    /** 
    * @var Site $site 
    * @ORM\Id 
    * @ORM\ManyToOne(targetEntity="Site") 
    * @ORM\JoinColumn(name="site_id", referencedColumnName="id") 
    */ 
     private $site; 

    /** 
    * @var string $pouet 
    * @ORM\Id 
    * @ORM\Column(name="pouet", type="string", length=255) 
    */ 
    private $pouet; 
} 

<?php 
use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Table(name="RangeItem") 
* @ORM\Entity 
*/ 
class Range 
{ 
    /** 
    * @todo This is test code only do not push me :-) 
    * @var ArrayCollection 
    * @ORM\ManyToOne(targetEntity="Offer") 
    */ 
    private $offers; 
} 

मैं यह त्रुटि obtaind:

[Doctrine\ORM\ORMException]
Column name id referenced for relation from Pouet\MyBundle\Entity\Range towards Pouet\MyBundle\Entity\Offer does not exist.

यही मतलब है, लेकिन मैं कैसे निपट सकते हैं इस मुद्दे के साथ? क्या समग्र प्राथमिक कुंजी वाला एक सारणी इस पर एसोसिएशन करने के लिए मना कर दिया गया है? ,

/** 
* @ORM\ManyToOne(targetEntity="Offer") 
* @ORM\JoinColumn(name="offer_pouet", referencedColumnName="pouet") 
*/ 
private $offers; 

क्योंकि @JoinColumn के लिए चूक, अगर आप उन्हें निर्दिष्ट नहीं करते, offer_id और id होगा:

उत्तर

1

आप जो ईद उपयोग करने के लिए निर्दिष्ट करने के लिए Range कक्षा में एक @JoinColumn एनोटेशन का उपयोग करने में सक्षम होना चाहिए क्रमशः, आपको मैन्युअल रूप से निर्दिष्ट करने की आवश्यकता है (मैं यहां एक अनुमान लगा रहा हूं कि pouet आपके Offer कक्षा के लिए एक अद्वितीय मान है)।

संपादित करें: अपनी टिप्पणी के आधार पर, मैं Composite Primary Key के लिए सिद्धांत परियोजना की साइट पर एक ट्यूटोरियल पाया। इकाई संबंध में mappedBy एक कुंजी के लिए और indexBy दूसरे के लिए है। उम्मीद है की वो मदद करदे।

+0

मेरे पास एक समग्र कुंजी है, मेरी ऑफ़र प्राथमिक कुंजी $ साइट और $ पॉउट का संयोजन है। यही कारण है कि मैं संदर्भित कॉलमनाम का उपयोग नहीं कर सकता, आपके पास एक संयुक्त होने पर पीके के लिए कोई कॉलम नाम नहीं है। – Damien

+0

गोचा, संपादन। लिंक के लिए – Problematic

+0

Thx, लेकिन यह भी काम नहीं करता है। मैं अभी भी यह नहीं समझ सकता कि अन्य ऑब्जेक्ट्स के अंदर मेरे ऑब्जेक्ट ऑफ़र का संदर्भ कैसे दिया जाए। मैं गंभीर रूप से सेक्सी समग्र कुंजी को छोड़ने के बारे में सोच रहा हूं, इसके बजाय एक सरल ऑटो-वृद्धि आईडी (और मेरे क्षेत्रों पर एक अद्वितीय सूचकांक) है। – Damien

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

  • कोई संबंधित समस्या नहीं^_^