2011-08-20 17 views
6

में Doctrine_Collection कुंजी मैपिंग विशेषता सेट करना सिद्धांत 1.2 में, Key Mapping को उस तालिका के लिए सेट करना संभव है जहां Doctrine_Collection उस तालिका द्वारा बनाई गई ऑब्जेक्ट संग्रह में प्रत्येक रिकॉर्ड में किसी विशेष कॉलम से कुंजी को पॉप्युलेट करेगा।schema.yml

प्रलेखन से एक उदाहरण जुड़ा हुआ ऊपर:

// test.php 

// ... 
$userTable = Doctrine_Core::getTable('User'); 

$userTable->setAttribute(Doctrine_Core::ATTR_COLL_KEY, 'username'); 

अब उपयोगकर्ता संग्रह तत्व अनुक्रमित के रूप में नाम स्तंभ के मूल्यों का उपयोग करेगा::

आप नाम स्तंभ मैप करने के लिए चाहते हो सकता है

// test.php 

// ... 
$users = $userTable->findAll(); 

foreach($users as $username => $user) { 
    echo $username . ' - ' . $user->created_at . "\n"; 
} 

क्या इसे स्कैन में सेट करने का कोई तरीका है hema.yml फ़ाइल?

उत्तर

5

ने वही समस्या की खोज करते हुए, मैं this example भर में आया था:

User: 
    columns: 
    ... 
    attributes: 
    coll_key: username 

हम एक करने के बाद पुष्टि कर सकते हैं:

--- 
User: 
    columns: 
    ... 
    attributes: 
    export: all 
    validate: true 

coll_key विशेषता के साथ एक ही सिद्धांत को लागू करने के लिए इस पैदावार निर्माण करें कि विशेषता स्वीकार की गई थी:

$this->setAttribute(Doctrine_Core::ATTR_COLL_KEY, 'username'); 

हालांकि, एक चेतावनी है।आप स्पष्ट रूप से slug निर्दिष्ट करने के लिए की आवश्यकता होगी

User: 
    actAs: 
    Sluggable: ~ 
    columns: 
    ... 
    attributes: 
    coll_key: slug 
$ symfony doctrine:build --all --no-confirmation 
>> doctrine Dropping "doctrine" database 
>> doctrine Creating "dev" environment "doctrine" database 
>> doctrine generating model classes 
>> file+  /tmp/doctrine_schema_60681.yml 
    ... 
>> doctrine generating form classes 

    Couldn't set collection key attribute. No such field 'slug'.

काम करने के लिए ऊपर जाने के लिए,: आप स्पष्ट रूप से स्तंभ है कि आप उपयोग करना चाहते हैं बनाने के लिए है, या किसी और सिद्धांत निर्माण प्रक्रिया के दौरान कोई त्रुटि फेंक होगा कॉलम, भले ही Sluggable टेम्पलेट सामान्य रूप से आपके लिए स्वचालित रूप से बनाता है:

User: 
    actAs: 
    Sluggable: ~ 
    columns: 
    ... 
    slug: 
     type: string(50) 
     unique: true 
    attributes: 
    coll_key: slug 
0

यदि यह संभव है, तो यह अच्छी तरह से प्रलेखित नहीं है। आप तालिका परिभाषा में एक टेबल के लिए विकल्प निर्दिष्ट कर सकते, like this यह जानते हुए कि

const ATTR_COLL_KEY    = 108; 

मैं कोशिश करेंगे:

User: 
    options: 
    attr_coll_key: username 
तो

User: 
    options: 
    attrCollKey: username 

या यहाँ तक कि

User: 
    options: 
    108: username 

मुझे विकल्प ठीक से नहीं मिल सका जहां कोड को नियंत्रित किया गया है, लेकिन आप xdebug चरण-दर-चरण डीबगिंग के साथ ऐसा कर सकते हैं।

शुभकामनाएँ, और इन प्रयासों में से कोई एक काम करता है तो उपयोग करें।

+0

सुझावों के लिए धन्यवाद; वे एक उत्कृष्ट प्रारंभिक बिंदु थे! मैं इसे एक विकल्प के बजाय एक विशेषता के रूप में निर्दिष्ट करके इसे काम करने में सक्षम था (अधिक जानकारी के लिए मेरा उत्तर देखें)। –

+0

@Phoenix: घटना नहीं पता था कि आप स्कीमा, महान काम में विशेषताओं को सेट कर सकते हैं! – greg0ire