2013-10-10 8 views
12

मुझे कुछ अपरिवर्तनीय फ़ील्ड को अलग-अलग वर्ग में स्थानांतरित करने की आवश्यकता है, लेकिन मैं वास्तव में "शामिल" का उपयोग नहीं करना चाहता, क्योंकि मुझे हर समय एक साथ सभी डेटा की आवश्यकता होती है।Doctrine2 अलग वर्ग में अपरिवर्तनीय फ़ील्ड को स्थानांतरित करें

क्या किसी भी तालिका में मैप किए गए वर्गों के रूप में कुछ इकाई विशेषताएँ हैं?

कुछ की तरह:

/** 
* @ORM\Entity 
*/ 
class User { 
    /** 
    * @var int 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 
    ... 

    /** 
    * @var Address 
    * @ORM\... ?? 
    */ 
    protected $address 
} 

/** 
* @ORM\ValueObject ?? 
*/ 
class Address { 
    /** 
    * @var string 
    * @ORM\Column(type="string", name="address_zipcode", length=12) 
    */ 
    protected $zipcode; 

    /** 
    * @var string 
    * @ORM\Column(type="string", name="address_country_iso", length=3) 
    */ 
    protected $countryIso; 
    ... 
} 

और तालिका संरचना होगा:

CREATE TABLE User (
    `id` INT(11) NOT NULL auto_increment, 
    `address_zipcode` VARCHAR(12) NOT NULL, 
    `address_country_iso` VARCHAR(3) NOT NULL, 
    PRIMARY KEY (`id`) 
); 
+5

शायद [यहां] (http://stackoverflow.com/questions/8440879/doctrine-2-value-objects) आप इस प्रश्न का उत्तर पा सकते हैं। –

+1

बहुत धन्यवाद, यही वह है जिसे मैं ढूंढ रहा हूं –

उत्तर

0

यदि आप बिना whant दुकान वस्तु में शामिल होने:

/** 
* @ORM\Column(name="adress", type="object") 
*/ 

यह क्रमानुसार/एक के लिए स्वचालित रूप deserialize होगा टेक्स्टफील्ड

http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/types.html

और प्रकार के साथ सेटर आप whant

public function setAdress(Address $adress) 
{ 
    $this->adress = $adress; 

    return $this; 
} 

Adress वर्ग स्टोर करने के लिए किसी भी @ORM एनोटेशन

0

की जरूरत नहीं होगी यह सिर्फ तरह आप की तरह कुछ का कहना है कि हो जाएगा जोड़ें।

@PreUpdate और @PostLoad हुक User में जोड़ें।

/** 
* @ORM\Entity 
*/ 
class User { 
    /** 
    * @var int 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 
    ... 

    /** 
    * @var Address 
    * (NOTE: no @ORM annotation here) 
    */ 
    protected $address 

    /** 
    * @var string 
    * @ORM\Column(type="string") 
    */ 
    protected $addressZipCode; 

    /** 
    * @var string 
    * @ORM\Column(type="string") 
    */ 
    protected $addressCountryIso; 

    public function setAddress(Address $address) 
    { 
     $this->address = $address; 
    } 

    /** 
    * @ORM\PreUpdate 
    * 
    * set $addressZipCode and $addressCountryInfo when this object is to 
    * save so that doctrine can easily save these scalar values 
    */ 
    public function extractAddress() 
    { 
     $this->addressZipCode = $this->address->getZipCode(); 
     $this->addressCountryIso = $this->address->getAddressCountryIso(); 
    } 

    /** 
    * @ORM\PostLoad 
    * 
    * When the row is hydrated into this class, 
    * $address is not set because that isn't mapped. 
    * so simply, map it manually 
    */ 
    public function packAddress() 
    { 
     $this->address = new Address(); 
     $this->address->setZipCode($this->addressZipCode); 
     $this->address->setCountryIs($this->addressCountryIso); 
    } 
} 
1

आप जो पूछ रहे हैं उसे वैल्यू ऑब्जेक्ट कहा जाता है।

समर्थन जोड़ने के लिए जिरा DDC-93 में एक खुली समस्या थी। यह वर्तमान संस्करण 2.5 में संकलित के रूप में चिह्नित है, जिसे अभी बीटा में रिलीज़ किया गया था।

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