संग्रह मॉडल और संसाधन मॉडल के बारे में


29

मैं संसाधन मॉडल और संग्रह मॉडल का उपयोग करने के बारे में थोड़ा भ्रमित हूं। कभी-कभी जब मैं विशिष्ट विशेषताओं का उपयोग करके उत्पादों को लोड करने के लिए उदाहरण देखता हूं, तो कुछ उदाहरणों में, वे संग्रह मॉडल का उपयोग करते हैं और कभी-कभी वे संसाधन मॉडल का उपयोग करते हैं।

मैं विशेष विधि का उपयोग कर सकते इसके अलावा जब get...और set...तालिका पंक्ति के नाम के साथ? जैसा getName, getId। मैंने उपयोग करने की कोशिश की, लेकिन मूल्यों को प्राप्त करने में असमर्थ रहा और यह त्रुटि दिखाता है: "ऑब्जेक्ट में अपरिभाषित पद्धति को कॉल करना"

$product = Mage::getModel('catalog/product')
    ->loadByAttribute('name', 'product_name');

echo $product->getName(); 
echo $product->getSku();

यह "अपरिभाषित विधि getSku()" दिखाता है

यदि मैं उपयोग करता हूं var_dump($product), तो SKU ऑब्जेक्ट में दिखाता है, हालांकि SKU का उपयोग करने में असमर्थ getSku()...


स्पष्ट होने के लिए - $productआपके उदाहरण में एक उदाहरण है Mage_Catalog_Model_Product, जो मैगनेटो पार्लेंस में एक "मॉडल" है।
रात

हा सही है। लेकिन मैं संग्रह मॉडल और संसाधन मॉडल का उपयोग करते समय भ्रमित हूं और उपयोग करने के लिए कौन से तरीके उपलब्ध हैं। जैसा कि मैंने देखा कि मॉडल मॉडल मॉडल में उपलब्ध हैं। मॉड्यूल और संसाधनों के संग्रह फ़ोल्डर संसाधन मॉडल में उपलब्ध हैं, लेकिन कब और किस मॉडल का उपयोग करने की आवश्यकता है, इसलिए मुझे इसके बारे में थोड़ा भ्रम है
MagentoBoy

मुझे पता है, हमें उपलब्ध तरीकों का उपयोग करने की आवश्यकता है जो संग्रह और बाहरी स्रोतों में भी उपलब्ध हैं। लेकिन मुझे सही मॉडल का उपयोग करने के लिए मुश्किलें हैं। और मैं भी "गेट" विधियों का उपयोग करके परिणाम सेट से परिणाम प्राप्त करने में सक्षम नहीं हूं इसका अर्थ है डेटाबेस तालिका पंक्ति नाम का उपयोग करके गेटनाम ()। यह ऑब्जेक्ट में अपरिभाषित विधि दिखाता है इसका मतलब है कि मैं गलत मॉडल या विधि का उपयोग कर रहा हूं जिसे मुझे उपयोग करने की आवश्यकता है, इसलिए मैं इसके बारे में अनुमान नहीं लगा रहा हूं जिसके लिए मुझे उपयोग करने की आवश्यकता है।
MagentoBoy

1
इस सवाल को पूछने के लिए धन्यवाद..मैं इस सवाल का जवाब लंबे समय से खोज रहा था .. +1 ..
इलावरसन

जवाबों:


63

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() विधि को । यह एक सरणी के रूप में सभी ऑब्जेक्ट के डेटा की एक सरणी लौटाएगा।

उम्मीद है कि यह आपको आगे बढ़ने के लिए पर्याप्त है। सौभाग्य!


@Alan .. बहुत अच्छा वर्णन ... मैंने आपके कई पोस्ट Magento पर पढ़े हैं :) .. मेरी पोस्ट पर आपका जवाब देखकर मैं बहुत खुश हूं। मैं आपकी जानकारी के साथ आगे बढ़ूंगा। अगर मुझे कोई मुद्दा मिलेगा तो मुझे उम्मीद है कि मुझे इस समुदाय से अच्छा समर्थन मिलेगा। जैसा कि मैं Magento में नया हूँ और साथ ही साथ मेरे quetion इतना वैचारिक नहीं हो सकता है लेकिन फिर भी मैं सीखना चाहता हूँ। मुझे वास्तव में
मैगनेटो

मुझे क्षमा करें, मेरा एक और प्रश्न है। अगर मैं $ उत्पाद = Mage :: getModel ('कैटलॉग / उत्पाद') कहता हूं; और फिर अगर मैं getName () और getSku () कहता हूं। अगर मैं foreachloop में $ उत्पाद को पुनरावृत्त करूं तो क्या मैं मूल्य प्राप्त कर सकता हूं ?? या मुझे loadByAttribute () विधि को कॉल करना है ??
MagentoBoy

@MagentoBoy मेरी क्षमा याचना, लेकिन भाषा बाधा आपके प्रश्न को मास्किंग करती प्रतीत होती है। मुझे यकीन नहीं है कि आप क्या पूछ रहे हैं।
एलन स्टॉर्म

महोदय, मुझे क्षमा करें। उत्तेजना में मैंने अपने प्रश्न को स्पष्ट रूप से व्यक्त नहीं किया। लेकिन मैंने कोशिश की और अब मैं उत्पादों की सूची प्राप्त करने में सक्षम हूं और अब विभिन्न विशेषताओं का उपयोग करके उत्पादों को ठीक से लाने में सक्षम हूं। :) और हाँ मेरा प्रश्न था, क्या मैं getName (), getPrice (), getSku (), AddAttributeToSelect ('*'), addAttributeToForter () या loadByAttribute () के बिना तरीकों का उपयोग कर सकता हूं; पूर्व के लिए। $ उत्पाद = दाना :: getModel ('कैटलॉग / उत्पाद'); foreach ($ p के रूप में उत्पाद) {echo $ p-> getName ()। " ।
MagentoBoy

1
@ user8009 यह त्रुटि संदेश असंख्य कारणों से हो सकता है। यदि आप एफ़टीपी एक्सेस प्राप्त नहीं कर सकते हैं, या सिस्टम के स्थानीय / विकास संस्करण में समस्या को पुन: उत्पन्न करते हैं तो आप कभी भी समस्या का समाधान नहीं करेंगे।
एलन स्टॉर्म
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.