2012-06-21 13 views
5

एवीआई में ActiveRecord और मॉडल के बीच संबंध या अंतर क्या है?yi में ActiveRecord और मॉडल() के बीच अंतर?

मैं is_object(CActiveRecord::model('Project')); लॉग करने की कोशिश कर रहा था और false की उम्मीद कर रहा था लेकिन यह true लौटा;

चूंकि लॉगिंग ने संकेत दिया कि यह एक वस्तु है, मैंने सोचा कि यह तालिका में एक पंक्ति का प्रतिनिधित्व कर रहा है, लेकिन मुझे coloumns का प्रतिनिधित्व करने वाले कोई भी गुण नहीं मिल सका।

http://www.yiiframework.com/doc/api/1.1/CActiveRecord#model-detail कहता है कि यह CActiveRecord वर्ग का उदाहरण लौटा रहा है, लेकिन मुझे उस ऑब्जेक्ट में तालिका पंक्ति का कोई भी मूल्य नहीं मिला।

+0

कुछ महीनों के लिए वाईआई के साथ काम करने के बाद, मुझे यह वास्तव में अजीब लगता है कि ActiveRecord क्लास ActiveRecord और मॉडल दोनों को संभालती है। यह सिर्फ मेरे लिए अजीब लगता है। –

उत्तर

8

जवाब आपके दस्तावेज़ीकरण लिंक में है लौटने देख सकते हैं, model() एक वर्ग स्तर विधि है, और यह:

निर्दिष्ट एआर कक्षा के स्थिर मॉडल देता है। लौटा मॉडल एआर वर्ग का एक स्थिर उदाहरण है। यह वर्ग स्तर की विधियों को लागू के लिए प्रदान की जाती है

के तुम क्या मान लीजिए (कुछ स्थिर वर्ग तरीकों के समान है।): $model=CActiveRecord::model('Project');, तो का उपयोग कर कि $model आप CActiveRecord के सभी वर्ग के स्तर तरीकों कॉल कर सकते हैं, जैसे:

$allModels = $model->findAll(); // will give you all the models of Project 
$someModel = $model->findByPk('pkValue'); // will give you the row with primary key value = pkValue 
$model->deleteAll(); // will delete all the records of Project 
// and so on 

संपादित करें:

इसके अलावा this post मंच में कहते हैं: (श्रेणी स्तर और स्थिर के बीच अंतर से मुलाकात की विभागाध्यक्षों)

कक्षा स्तर के तरीके प्रभावी रूप से स्थिर तरीके हैं लेकिन विरासत का उपयोग करने में सक्षम होने के लाभ के साथ। यही है, आप उप-वर्ग में कक्षा स्तर विधि के संचालन को ओवरराइड कर सकते हैं, जबकि यदि आप एक स्थिर विधि का उपयोग करते हैं तो आप इसे ओवरराइड नहीं कर पाएंगे। .... तो, सामान्य रूप से, आपको क्लास लेवल विधियों का उपयोग करना चाहिए, न कि स्थैतिक तरीकों से, क्योंकि यह आपको विरासत का लाभ देता है हालांकि यह थोड़ा अजीब महसूस कर सकता है। फिर आप उन्हें $ वर्ग :: मॉडल() -> विधि() का उपयोग करके कॉल करते हैं।

2

ActiveRecord एक पैटर्न है। संबंधपरक डेटाबेस में डेटा स्टोर करने के लिए एक पैटर्न। मॉडल, एमवीसी पैटर्न में, डेटा का हिस्सा है। तो, वाईआई एक एमवीसी ढांचा है जो मॉडल के लिए ActiveRecord लागू करता है।

मॉडल विधि इस

public static function model($className=__CLASS__) 
{ 
    if(isset(self::$_models[$className])) 
     return self::$_models[$className]; 
    else 
    { 
     $model=self::$_models[$className]=new $className(null); 
     $model->_md=new CActiveRecordMetaData($model); 
     $model->attachBehaviors($model->behaviors()); 
     return $model; 
    } 
} 

आप एक वस्तु

+0

धन्यवाद। सरल और पूर्ण उत्तर। – shgnInc

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