Magento के CRUD मॉडल में तीन बुनियादी वर्ग प्रकार हैं।
एक "मॉडल" वह है जो आप सबसे अधिक उपयोग करेंगे। यह एक डेटाबेस एग्नॉस्टिक तरीके (उत्पाद, श्रेणी, सीएमएस पृष्ठ, समीक्षा, आदि) में एक विशेष प्रकार के डेटा का प्रतिनिधित्व करता है।
एक "संसाधन मॉडल" एक ऐसा वर्ग है, जो पर्दे के पीछे, मैगेंटो से डेटा की वास्तविक प्राप्ति करता है। प्रत्येक मॉडल में एक संसाधन मॉडल होता है जिसका उपयोग डेटाबेस से किसी मॉडल के एकल उदाहरण को लोड करने के लिए किया जाता है ।
"संग्रह" एक ऐसा वर्ग है जो नियमों के एक सेट के आधार पर कई मॉडलों की संरचना की तरह एक सरणी को लोड करता है। इसे SQL की तरह समझें WHERE clause
।
कुछ चीजों को भ्रमित करना, पर्दे के पीछे, Magento भी एक संग्रह को एक संसाधन मॉडल मानता है। इसलिए संग्रह संसाधन मॉडल और व्यक्तिगत संसाधन मॉडल हैं ।
सामान्यतया, जब आप किसी विशिष्ट आइटम को लोड करना चाहते हैं, तो आप एक मॉडल का उपयोग करते हैं । जब आप कई आइटम लोड करना चाहते हैं, तो आप एक संग्रह संसाधन मॉडल का उपयोग करते हैं ।
//loads one
$product = Mage::getModel('catalog/product')->load($id);
//loads many products where price is greater than 100
$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*') //load all fields, see EAV below
->addAttributeToFilter('price', array('gt'=>'100'));
foreach($products as $product)
{
var_dump($product->getSku());
}
एक संग्रह संसाधन मॉडल के माध्यम से लोड करने के बारे में ध्यान रखने वाली एक बात यह है कि प्रत्येक व्यक्तिगत मॉडल की afterLoad
विधि को स्वचालित रूप से नहीं कहा जाएगा, जिसका अर्थ है कि कुछ डेटा लोड नहीं किया जा सकता है।
Individua संसाधन मॉडल वर्गों आमतौर पर सीधे पहुँचा नहीं कर रहे हैं। हालांकि, कभी-कभी एक विशिष्ट मॉडल में एक संसाधन मॉडल होगा, जिस पर एक उपयोगी विधि होगी। ये आप सिस्टम का उपयोग करके समय के साथ खोज लेंगे।
अंत में, वहाँ एक और भेद किया जाना है। Magento के नियमित CRUD मॉडल में कुछ के माध्यम से लोड करने के लिए एक विशेष वाक्यविन्यास है जो कि संख्यात्मक आईडी नहीं है। उदाहरण के लिए, यहां शीर्षक द्वारा CMS पृष्ठ मॉडल लोड करने का तरीका बताया गया है
$page = Mage::getModel('cms/page')->load('Home page','title');
var_dump($page->getData());
हालाँकि, कुछ Magento मॉडल EAV मॉडल हैं। यह "इकाई विशेषता मूल्य" के लिए खड़ा है, और यह कहने का एक शानदार तरीका है कि इन मॉडलों में फ़ील्ड का एक निश्चित सेट नहीं है। इसमें उत्पाद मॉडल और श्रेणी मॉडल शामिल हैं। यह सुविधा है जो आपको विभिन्न प्रकार के उत्पादों के लिए विभिन्न विशेषताओं को चुनने देती है। EAV मॉडल पर प्रत्येक फ़ील्ड को एक विशेषता के रूप में जाना जाता है। उपरोक्त सिंटैक्स इन मॉडलों के साथ काम नहीं करेगा, इसके बजाय आपको loadByAttribute
विधि का उपयोग करने की आवश्यकता है ।
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'n2610');
अपनी विशिष्ट समस्या के बारे में, यदि आपको विशिष्ट पाठ "विधि अपरिभाषित" के साथ कोई त्रुटि हो रही है, तो आपके सिस्टम में कुछ गड़बड़ है। यहां तक कि अगर getSku
विधि मौजूद नहीं है, तो Magento में मैजिक सेटर और गेट्टर विधियाँ हैं जो get
किसी भी कॉल को सुनिश्चित करती हैं मॉडल हमेशा कुछ वापस आ जाएगी, भले ही यह शून्य हो।
अधिक संभावना यह है कि आपको निम्नलिखित की तरह एक त्रुटि मिल रही है
Call to a member function getSku() on a non-object
यह त्रुटि इसलिए हो रही है क्योंकि loadByAttribute
विधि लौटाती है false
यदि वह ऑब्जेक्ट को लोड नहीं कर सकती है।
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'this-is-not-a-sku');
var_dump($product); //prints false
अपने कोड में कुछ इस तरह का प्रयास करें।
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'sku-value');
if($product)
{
var_dump($product->getName());
var_dump($product->getSku());
var_dump($product->getData());
}
else
{
var_dump("Could not load product");
}
सशर्त के अतिरिक्त, नोटिस getData()
विधि को । यह एक सरणी के रूप में सभी ऑब्जेक्ट के डेटा की एक सरणी लौटाएगा।
उम्मीद है कि यह आपको आगे बढ़ने के लिए पर्याप्त है। सौभाग्य!
$product
आपके उदाहरण में एक उदाहरण हैMage_Catalog_Model_Product
, जो मैगनेटो पार्लेंस में एक "मॉडल" है।