2012-02-21 14 views
8

से मान सरणी कैसे प्राप्त करें Yii का उपयोग करके, मैं सक्रिय रिकॉर्ड से सरणी कैसे प्राप्त कर सकता हूं।वाईआई - सक्रिय रिकॉर्ड

इस तरह

कहो कुछ: इस तरह

array('foo', 'bar', 'lala')

कुछ से:

MyTable::model()->findall() 
+0

foo, bar और lala क्या हैं? एक टेबल/मॉडल या विभिन्न मॉडल वस्तुओं के गुण? –

+0

क्या आप यह पूछने की कोशिश कर रहे हैं कि आप सभी फ़ंक्शन खोजने के लिए स्थिति, पैरा आदि का उपयोग कैसे कर सकते हैं? – Arfeen

+0

मूल्य। मैं एक टेबल से एक सरणी ओ मान प्राप्त करना चाहता हूँ। उदाहरण के लिए देशों की एक सारणी जिसमें देशों को शामिल किया गया है। – Marian

उत्तर

0

ActiveRecord का उपयोग न करें। CDBCommand->queryColumn()

+0

मेह ... Django यह है: https://docs.djangoproject.com/en/dev/ref/models/querysets/#values-list क्यों Yii भी ऐसा नहीं कर सकता है? – Marian

+1

यदि आप पहले से किसी भी का उपयोग कर रहे हैं या उसके ActiveRecord के लिए ढूँढें, तो यह स्पष्ट रूप से उन्हें कॉल नहीं करेगा। उदाहरण के लिए, मैं पहले से कुछ prefiltering कर रहा था ढूँढें कि क्वेरी कॉलम में नहीं कहा गया था, तो हम उम्मीद से अधिक परिणाम प्राप्त कर रहे थे। सौभाग्य से हमारे पास इस तरह की चीजों को पकड़ने के लिए कुछ परीक्षण किए गए थे, अन्यथा इससे हमें उत्पादन में सड़क पर चोट लगी होगी। –

+2

सवाल मायटेबल :: मॉडल() -> findall() से वास्तविक डेटा प्राप्त करने के बारे में है; तो, जवाब irrelevent –

24

तो मैं तुम्हें सही ढंग से समझ:

$users = User::model()->findAll(); 
$usersArr = CHtml::listData($users, 'id' , 'name'); 
print_r($usersArr); 

यह आप सरणी आईडी दे देंगे = > नाम

Array { 
    2 => 'someone', 
    20 => 'kitty', 
    102 => 'Marian', 
    // ... 
} 
+0

हाँ, मैंने इसके बारे में सोचा, लेकिन क्या सिर्फ 'नाम' का उपयोग करने का कोई तरीका नहीं है? – Marian

+0

यदि आप केवल नाम का उपयोग करना चाहते हैं तो कुंजी एक समस्या नहीं होनी चाहिए? यदि आप चाहें तो कुंजी को रीसेट करने के लिए आप array_values ​​का उपयोग कर सकते हैं। –

+1

नेह .. यह इस तरह काम नहीं करता .. – Marian

6

ActiveRecord वर्ग का प्रयोग करें एक विशेषता बुलाया जिम्मेदार बताते हैं। आप यहां अपना विवरण पा सकते हैं: http://www.yiiframework.com/doc/api/1.1/CActiveRecord#attributes-detail

आदेश एक सरणी में सभी विशेषताओं पाने के लिए, इस का उपयोग करें: $var = $model->attributes;

3

तुम भी तरह

$countries = Country::model()->findAll(); 
array_values(CHtml::listData($countries, 'country_id', 'country_name')); 

जो सभी देश के नाम की एक सरणी देता है, या

array_keys(CHtml::listData($countries, 'country_id', 'country_name')); 
कुछ कर सकते हैं

जो सभी देश आईडी के एक सरणी देता है।

0

इस पर Chtml का उपयोग करें एक बदसूरत हैक है! लागू करें इस समाधान यह है कि मैंने पाया करने के लिए बेहतर तरीका है:

public function queryAll($condition = '', $params = array()) 
{ 
    $criteria = $this->getCommandBuilder()->createCriteria($condition, $params); 
    $this->applyScopes($criteria); 
    $command = $this->getCommandBuilder()->createFindCommand($this->getTableSchema(), $criteria); 
    $results = $command->queryAll(); 
    return $results; 
} 

आप एक ActiveRecord वर्ग के लिए इस कोड जोड़ सकते हैं, जैसे:

class ActiveRecord extends CActiveRecord { 
//... 
} 

और, इस तरह का उपयोग करें:

return $model->queryAll($criteria); 

आप this link में और अधिक पढ़ सकते हैं।

+0

ध्यान दें कि [केवल-लिंक उत्तर] (http://meta.stackoverflow.com/tags/link-only-answers/info) निराश हैं, SO उत्तर समाधान के लिए खोज का अंत बिंदु होना चाहिए (बनाम। फिर भी संदर्भों का एक और स्टॉपओवर, जो समय के साथ पुराना हो जाता है)। लिंक को संदर्भ के रूप में रखते हुए, यहां स्टैंड-अलोन सारांश जोड़ना पर विचार करें। – kleopatra

1

कैसे के बारे में:

Yii::app()->db->createCommand() 
    ->setFetchMode(PDO::FETCH_COLUMN,0) 
    ->select("mycolumn") 
    ->from(MyModel::model()->tableSchema->name) 
    ->queryAll(); 

परिणाम होगा:

array('foo', 'bar', 'lala') 
5
yii2 लिए

, उपयोग:

yii\helpers\ArrayHelper::map(MyModel::find()->all(), 'id', 'name')); 

या

yii\helpers\ArrayHelper::getColumn(MyModel::find()->all(), 'name')); 
0

यदि आप Yii1.1 का उपयोग कर रहे हैं और आपको एआर से सरणी के रूप में सभी डेटा प्राप्त करने की आवश्यकता है तो आपको इसकी देखभाल करने की आवश्यकता है। Yii1।1 ए आर बॉक्स से बाहर इस सुविधा नहीं है

Yii2 एआर में asArray() विधि है, यह बहुत उपयोगी है

मुझे आशा है कि मेरा उत्तर अपने नियंत्रक को शामिल करके मदद करता है किसी को

+0

एक उदाहरण प्रदान करना थोड़ा बेहतर मदद कर सकता है। –

1

उपयोग Yii2 ArrayHelper इस एक मॉडल डेटा को एक संबंधित सरणी में परिवर्तित करेगा

use yii\helpers\ArrayHelper; 

    $post = ArrayHelper::toArray(ClientProfilesForm::findOne(['id' => 1])); 

//or use it directly by 

    $post = yii\helpers\ArrayHelper::toArray(ClientProfilesForm::findOne(['id' => 1])); 
संबंधित मुद्दे