2011-03-07 24 views
5

मैं एक ड्रॉप डाउन के रूप में संबंधित तालिका से डेटा की सूची प्राप्त करने के लिए निम्नलिखित का उपयोग कर Yii में कुछ रूपों है:आदेश का उपयोग कर ड्रॉपडाउन सूची आदेश दिया?

dropDownList(CHtml::listData(Company::model()->findAll(array('order' => 'company ASC')))); 

यह काम करता है, लेकिन यह है कि हर ड्रॉप डाउन सूची के लिए इसका मतलब है (जो एक बहुत theres के) मैं इस में array('order' => 'company ASC' डाल रहा हूं।

क्या यह करने का सबसे अच्छा तरीका है? मॉडल संबंधों() का उपयोग करके और डेटा के संबंध में आदेश निर्दिष्ट करने का कोई तरीका नहीं है?

उत्तर

5

मुझे विश्वास है कि ऐसा करने का सही तरीका scopes का उपयोग कर है।

आप दायरे होते परिणाम सेट आदेश के किसी भी संख्या को परिभाषित करने और उन्हें इतनी तरह उपयोग कर सकते हैं:

Company::model()->scopeName()->findAll(); 

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

public function defaultScope() { 
    return array('order' => 'company ASC'); 
} 

यह करने के लिए Company::model()->findAll(); अनुसार क्रमबद्ध परिणाम देने वाले प्रत्येक कॉल का परिणाम देगा।

+0

आह जो मैं देख रहा हूं। धन्यवाद! – djt

+0

लेकिन आप डेटाबेस में जो भेजना चाहते हैं वह शायद कंपनी आईडी है, न कि कंपनी का नाम (जो ड्रॉपडाउन सूची में दिखाई देगा) .. आप इसे कैसे संभालेंगे? –

1

मैं आमतौर पर एक मॉडल है कि एक लटकती के लिए स्रोत के रूप में इस्तेमाल किया जा सकता करने के लिए एक opts() विधियों को जोड़ने:

class Company extends CActiveRecord 
{ 
    // ... 

    public static opts() 
    { 
     $opts = array(); 
     foreach(self::model()->findAll(array('order'=>'name ASC')) as $model) 
      $opts[$model->id] = $model->name; 
     return $opts; 
    } 

यह इस

echo $form->dropDownList($user, 'company_id', Company::opts()); 

की तरह प्रयोग किया जाता है आप पर एक ही विकल्प कई बार की जरूरत है एक पृष्ठ, आप एक निजी स्थिर वर्ग चर में परिणाम "कैश" भी कर सकते हैं या सूची डेटा को अधिक कुशल तरीके से लाने के लिए डीएओ का उपयोग कर सकते हैं।

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