2009-04-03 18 views

उत्तर

5

अनुमान:

एक मॉडल आम तौर पर डेटाबेस के लिए एक पहुँच बिंदु है, और अधिक विशेष रूप से, डेटाबेस में एक निश्चित मेज पर। डिफ़ॉल्ट रूप से, प्रत्येक मॉडल उस तालिका का उपयोग करता है जिसका नाम अपने आप का बहुवचन है, यानी 'उपयोगकर्ता' मॉडल 'उपयोगकर्ता' तालिका का उपयोग करता है।

मुझे ऐसा नहीं लगता है, लेकिन आप जो कुछ भी चाहते हैं वह संबंध बना सकते हैं।

Check this

+0

मैं इसे "यह जांचें" लिंक नहीं खोल सकता। –

1

यह एक ही समय में एक से अधिक ... टेबल नहीं हो सकता है, लेकिन आप किसी दूसरे पर मॉडल की मेज स्विच करने के लिए मॉडल :: useTable संपत्ति संशोधित करने में सक्षम हो सकता है। इसे एक भंवर दें और अगर यह काम करता है तो हमें बताएं।

2

तकनीकी रूप से, जिस तरह से आप सवाल पूछ रहे हैं, उस पर आधारित नहीं, मुझे पता नहीं है। अक्सर, हालांकि, मैं कुछ ऐसे संबंधों का उपयोग करूंगा जो हो सकता है जो आप के बाद हो। उदाहरण के लिए, एक व्यक्ति को पता जानकारी होती है जिसे आसानी से लोगों की मेज में गिराया जा सकता है, लेकिन मैं आमतौर पर इसे बाहर खींचना पसंद करता हूं क्योंकि अन्य संस्थाओं में पते (एक व्यवसाय, आदि) भी हो सकते हैं।

वही विचार अगर आप अपने डीबी में किसी प्रकार का छद्म-विरासत मॉडल लागू करना चाहते हैं। उदाहरण के लिए, स्वयंसेवक लोग हैं, लेकिन ठेकेदार, विक्रेता और कर्मचारी भी हैं। सभी शेयर कुछ निश्चित गुण जिन्हें आप लोगों की मेज और अन्य लोगों में स्टोर करना चाहते हैं जो कि व्यक्ति के प्रकार के लिए अद्वितीय हैं।

प्रत्येक मामले में आपके पास दो मॉडल होते हैं, लेकिन वे अपने संगठनों के माध्यम से एक साथ काम करते हैं।

यदि ऐसा परिदृश्य है जिसके बारे में आप सोच रहे हैं तो एक समान दृष्टिकोण आपके लिए काम कर सकता है हालांकि यह एकाधिक टेबल वाले मॉडल के बारे में नहीं है।

1

मुझे लगता है कि आप डेटाबेस में किसी प्रकार की विरासत को कार्यान्वित करना चाहते हैं (जिसके लिए बच्चे तालिका से जानकारी पुनर्प्राप्त करते समय मूल तालिका में संग्रहीत डेटा में शामिल होना आवश्यक है)। इस हल करने के लिए मेरा दृष्टिकोण बाल मॉडल में कॉलबैक के बाद उपयोग कर रहा था।

function afterFind($results) { 
    foreach ($results as $key => $val) { 
       $fieldRetrieved=$this->query("SELECT *field* FROM *parent_table* WHERE id={$val['*ChildModelName*']['id']}"); 
       $results[$key]['*ChildModelName*']['*field*']=$fieldRetrieved[0]['*parent_table*']['*field*']; 
    } 
    return $results; 
} 

इस तरह से मैं भी शामिल किया गया था बच्चे मेज से प्राप्त परिणामों के लिए माता-पिता की मेज से क्षेत्र/s में: इस प्रकार मैं कॉलबैक नए सिरे से परिभाषित। इस मामले में मैंने माना है कि दोनों टेबल आईडी नामक फ़ील्ड के साथ इंडेक्स हैं और वह फ़ील्ड, बाल तालिका में, मूल तालिका के लिए एक विदेशी कुंजी भी है (इस प्रकार छद्म-विरासत बना रही है)।

4

यकीन है कि यह सुविधाजनक हो सकता है, जब आपके पास बहुत समान सारणी हों।

class SomeModel extends Model 
{ 
    var $useTable = false; 

    public function ReadData() 
    { 
     // select table 
     if($a == 1) 
      $this->setSource('tableName1'); 
     else if($a == 2) 
      $this->setSource('tableName2'); 
     // ... 
     else if($a == N) 
      $this->setSource('tableNameN'); 

     // now perform operations with selected table 
     return $this->find('all'); 
    } 
} 
+0

क्या आप केवल 'स्रोत' को परिभाषित करने के बजाय टेबल के पूरे सेट में '(' '' 'ढूंढ सकते हैं? – Oliboy50

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