magento
ईएवी (एंटिटी एट्रीब्यूट वैल्यू)
खोज…
टिप्पणियों
सत्ता
स्टोर किए जा रहे डेटा के प्रकार के बारे में जानकारी संग्रहीत करता है। Magento के मामले में यह ग्राहक, उत्पाद, श्रेणी आदि है।
गुण
प्रत्येक संस्था के व्यक्तिगत गुण, जैसे नाम, वजन, ईमेल पता आदि।
मूल्य
किसी दिए गए निकाय और विशेषता का मूल्य। उदाहरण के लिए, हम ग्राहक इकाई और ईमेल विशेषता को निर्दिष्ट कर सकते हैं और फिर इसे [email protected] मान दे सकते हैं।
डेटाबेस स्कीमा
eav_entity
इकाई तालिका।
eav_entity_attribute
विशेषता तालिका।
eav_entity_ {} प्रकार
मान तालिकाओं। प्रकार डेटाइम, डिकिमल्स, इंट, टेक्स्ट और वर्चर हैं।
यह नोट करना महत्वपूर्ण है कि eav_entity_varchar तालिका में मानों के लिए प्रकार varchar है भले ही दिनांक या पूर्णांक मान बेहतर मानें।
मॉडल बनाम संसाधन मॉडल
Mage / Eav / Model / Resource के अंदर के सभी मॉडल Mysql4 हैं और संसाधन मॉडल हैं।
इसके अलावा Entity / Abstract.php और Entity / Setup.php।
फ्लैट बनाम ईएवी
ईएवी मॉडल अधिक जटिल हैं, जो कई तालिकाओं से बचाने और लोड करने के लिए तर्क प्रदान करते हैं, जबकि फ्लैट या मानक मॉडल अपेक्षाकृत सरल (पारंपरिक) हैं।
मानक मॉडल मुख्य रूप से डेटा सेटर्स और गेट टेबल के साथ काम करने वाले गुणों के साथ अपने गुणों का प्रबंधन करते हैं। ईएवी मॉडल मुख्य रूप से अपने विशेषता मॉडल का प्रबंधन करते हैं। मानक मॉडल केवल अपने डेटा को एक टेबल पर सहेजते हैं और उससे लोड होते हैं। ईएवी मॉडल आधार डेटा लोड करने के बाद सभी को (या एक विशिष्ट सेट) विशेषताओं को लोड करते हैं और डेटा सहेजने के बाद विशेषताओं को बचाते हैं (विशेषताओं को सम्मिलित करना, अपडेट करना और हटाना सहित)।
ईएवी संसाधन मॉडल उदाहरण
ईएवी स्टोरेज स्कीमा का उपयोग करने वाली संस्थाओं को खोजने के लिए स्ट्रिंग का विस्तार होता है Mage_Eav_Model_Entity_Abstract का उपयोग किया जा सकता है। यह ईएवी संरचना के आधार पर सभी संसाधन मॉडल प्रकट करना चाहिए। हालाँकि, परिणामी सूची में Mage_Sales मॉड्यूल से कई अप्रचलित वर्ग शामिल होंगे जिनका अब उपयोग नहीं किया जा रहा है।
ईएवी स्टोरेज स्कीमा का उपयोग करने वाली संस्थाओं के लिए एकमात्र मॉड्यूल Mage_Catalog (श्रेणियां और उत्पाद) और Mage_Customer (ग्राहक और पते) हैं।
ग्राहक समूह फ्लैट टेबल स्टोरेज स्कीमा का उपयोग करते हैं। सभी बिक्री संस्थाएं जहां Magento 1.4 की रिलीज के साथ फ्लैट टेबल संस्थाओं में परिवर्तित हो गईं।
ईएवी का उपयोग करने का कारण यह है कि संस्थाओं में गुणों की एक अनिर्धारित संख्या हो सकती है और इसलिए लचीली बनी रहती है। उदाहरण के लिए, जब आप एक ग्राहक इकाई (जो कि ईएवी इकाई है) में एक नई विशेषता जोड़ते हैं, तो इस नई विशेषता को जोड़ने के लिए डेटाबेस तालिका को बदलने की आवश्यकता नहीं है।
लाभ
लचीलापन डेटाबेस स्कीमा को लागू करने के लिए मॉडल के साथ बदलने की आवश्यकता नहीं है
नुकसान
- अप्रभावी
20 कॉलमों को लौटाने वाली क्वेरी सामान्य रूप से EAV में 20 सेल्फ जॉइन करती है। हालाँकि, Mage_Eav मॉड्यूल आमतौर पर विशेषता मान डेटा को लोड करने के लिए joins का उपयोग नहीं करता है। इसके बजाय संघ चयन का उपयोग किया जाता है। जॉइन केवल ईएवी संग्रह को फ़िल्टर करने के लिए उपयोग किया जाता है।
- उपप्रकारों के बीच संबंधों के लिए कोई तंत्र नहीं
- इकाई उपप्रकारों का कोई समूह नहीं
वेबसाइट और स्टोर स्कोप्स
ईएवी के भीतर वेबसाइट और स्टोर स्कोप एट्रीब्यूट वैल्यूज को हैंडल करने के लिए, एक स्टोर_एड वैल्यू स्कोप को दिखाने के लिए कैटलॉग एंटिटी पर मौजूद है, जो कोर_स्टोर से लिंक करता है। सामान्य दुकानों (स्टोर व्यू) के साथ-साथ एक स्टोर '0' भी है जो वैश्विक मूल्य है। जब किसी विशेष स्टोर पर, सिस्टम पहले वर्तमान स्टोर पर एक इकाई मूल्य के लिए जांच करेगा और फिर वैश्विक इकाई पर वापस आ जाएगा। Mage_Customer EAV संस्थाओं में store_id स्कोप कॉलम नहीं है।
सम्मिलित करें, अद्यतन करें और हटाएं
यह निर्धारित करने के लिए कि किसी विशेषता पर कोई इन्सर्ट, अपडेट या डिलीट करने की आवश्यकता है, मूल ऑब्जेक्ट के खिलाफ तुलना की जाती है। मूल ऑब्जेक्ट मूल रूप से डेटा ऑब्जेक्ट का एक डुप्लिकेट है जब इकाई डेटाबेस से पुनर्प्राप्त की गई थी।
- यदि विशेषता मूल रूप से मौजूद है और इसका नया मूल्य खाली नहीं है; यह अद्यतन करता है।
- यदि विशेषता मूल रूप से मौजूद है, लेकिन इसका नया मान खाली है; इसे हटा देता है। - यदि विशेषता मूल रूप से मौजूद नहीं है और इसका नया मूल्य खाली नहीं है; यह सम्मिलित करता है।
विशेषता प्रबंधन
मॉडल का समर्थन करें
मॉडल रूप में विशेषता को प्रस्तुत करता है, डेटाबेस फॉर्म में इसका तर्क सभी विशेषताओं के लिए मानक है और इसे बदलना मुश्किल है ।
फ्रंटेंड मॉडल
दृश्यपटल के लिए विशेषता का इंटरफ़ेस और किसी भी तर्क को प्रदान करता है जो विशेषता के लिए दृश्यपटल पर आवश्यक है, उदाहरण के लिए छवियों पर getUrl () विधि।
बैकएंड मॉडल
ये डेटाबेस पर सहेजे जाने से पहले विशेषता पर सत्यापन करते हैं। उदाहरण के लिए, पासवर्ड बैकेंड मॉडल सहेजे जाने से पहले पासवर्ड को हैश में बदल देता है। यह यह भी जाँचता है कि पासवर्ड और पासवर्ड की पुष्टि करने से पहले सहेजने के लिए मेल खाता है।
स्रोत मॉडल
एक विशेषता के लिए उपलब्ध विकल्पों को आबाद करने के लिए उपयोग किया जाता है, जैसे कैटलॉग / product_status सक्षम और अक्षम है।
आवश्यक विधियाँ
एक स्रोत मॉडल की आवश्यकता है:
<?php
public function getAllOptions();
public function getOptionText($value);
?>
आमतौर पर केवल getAllOptions () को लागू करने की आवश्यकता है, क्योंकि getOptionText () के लिए एक कार्यान्वयन पहले से ही सार स्रोत मॉडल Mage_Eav_Model_Entity_Attribute_Source_Abstract में मौजूद है।
फ्रंटएंड मॉडल को विधि getValue () की आवश्यकता नहीं होती है।
एक बैकेंड मॉडल की आवश्यकता है:
<?php
public function getTable();
public function isStatic();
public function getType();
public function getEntityIdField();
public function setValueId($valueId);
public function getValueId();
public function afterLoad($object);
public function beforeSave($object);
public function afterSave($object);
public function beforeDelete($object);
public function afterDelete($object);
public function getEntityValueId($entity);
public function setEntityValidId($entity, $valueId);
?>
ये सभी विधियाँ अमूर्त बैकेंड मॉडल Mage_Eav_Model_Entity_Attribute_Backend_Abstract में लागू की गई हैं। कस्टम बैकएंड मॉडल के लिए केवल अनुकूलन की आवश्यकता वाले तरीकों को ओवरराइड करने की आवश्यकता है।
सिस्टम कॉन्फ़िगरेशन स्रोत मॉडल
EAV विशेषताओं के लिए उपयोग नहीं किया जा सकता है। EAV स्रोत मॉडल getAllOptions विधि को कार्यान्वित करते हैं, जबकि adminhtml स्रोत मॉडल theOptionArray () विधि को कार्यान्वित करते हैं।
डिफ़ॉल्ट सिस्टम कॉन्फ़िगरेशन स्रोत मॉडल Mage / Adminhtml / मॉडल / सिस्टम / कॉन्फ़िगरेशन / स्रोत / में पाए जा सकते हैं।
स्रोत मॉडल को शामिल करें
अट्रैक्टिव सोर्स मॉडल्स का उद्देश्य चुनिंदा और बहुउपयोगी विशेषताओं के लिए विकल्पों और मूल्यों की सूची की आपूर्ति करना है। यदि आवश्यक हो तो वे कैटलॉग फ्लैट टेबल इंडेक्सर को कॉलम की जानकारी भी देते हैं।
किसी विशेषता के सभी विकल्पों की सूची प्राप्त करने के लिए, निम्नलिखित कार्य करें:
<?php
$options = $attribute->getSource()->getAllOptions(false);
// or for admin
$options = $_attribute->getSource()->getAllOptions(true, true);
?>
डिफ़ॉल्ट विशेषता मॉडल
यदि कोई वर्ग किसी दृश्यपटल, बैकएंड या - के रूप में निर्दिष्ट या चयनित विशेषताओं के लिए निर्दिष्ट नहीं है - स्रोत मॉडल, एक डिफ़ॉल्ट वर्ग का उपयोग किया जाता है।
डिफ़ॉल्ट विशेषता दृश्यपटल मॉडल Mage_Eav_Model_Entity_Attribute_Frontend_Default है।
डिफ़ॉल्ट विशेषता बैकएंड मॉडल विशेषता कोड पर निर्भर करता है और Mage_Eav_Model_Entity_Attribute :: _ getDefaultBackendModel () पद्धति में निर्धारित होता है।
<?php
protected function _getDefaultBackendModel()
{
switch ($this->getAttributeCode()) {
case 'created_at':
return 'eav/entity_attribute_backend_time_created';
case 'updated_at':
return 'eav/entity_attribute_backend_time_updated';
case 'store_id':
return 'eav/entity_attribute_backend_store';
case 'increment_id':
return 'eav/entity_attribute_backend_increment';
}
return parent::_getDefaultBackendModel();
}
?>
यदि विधि अंतिम पंक्ति से होकर गुजरती है तो Mage_Eav_Model_Entity_Attribute_Backend_Default उपयोग किया जाता है।
डिफ़ॉल्ट स्रोत मॉडल Mage_Eav_Model_Entity_Attribute_Source_Table में सेट किया गया है। यह कैटलॉग मॉड्यूल विशेषता मॉडल में सेट किया गया है। ईवी मॉड्यूल में निर्दिष्ट डिफ़ॉल्ट कॉन्फ़िगरेशन स्रोत मॉडल का उपयोग कभी नहीं किया जाता है।
विशेषता जोड़ें
EAV विशेषताएँ जोड़ने के लिए, सेटअप वर्ग में विस्तार करके Mage_Eav_Model_Entity_Setup का उपयोग करें।
addAttribute () विशेषताएँ बनाता है, इसे समूहों और सेटों में जोड़ें (डिफ़ॉल्ट सहित), या यदि यह पहले से मौजूद है तो अपडेट करें। श्रद्धांजलि () केवल विशेषता डेटा को अपडेट करता है। इन विधियों का विस्तार करने, अतिरिक्त डेटा जोड़ने या आवश्यक तर्कों को सरल बनाने के लिए कस्टम सेटअप कक्षाओं का उपयोग किया जा सकता है।
फ्लैट टेबल
फ्लैट कैटलॉग विशेषताओं को इंडेक्सर्स द्वारा प्रबंधित किया जाता है:
Mage_Catalog_Model_Resource_Product_Flat_Indexer :: updateAttribute () Mage_Catalog_Model_Resource_Category_Flat :: सिंक्रोनाइज़ () उत्पाद विशेषताएँ फ्लैट तालिका में जुड़ जाती हैं यदि वे हैं तो देखें (देखें Mage_Catalog_Model_Resource_Product_Product_Product_Product_Froduct_Droduct_FORD_PORT_SPORT_FORD_PORT_CORDER_PORT_FORD_PPORT_FORD_PORD_PORD_PORD_PORD_PORD_PORD_PORD_Pource_Product_Ford_Product_Force_Motel_Resource_Product_Flite_Indexer :: updateAttribute) () Mage_Catalog_Model_Resource_Category_Flat :: सिंक्रनाइज़ करें () उत्पाद विशेषताएँ फ्लैट तालिका में जोड़ दी जाती हैं यदि वे हैं तो देखें
स्टैटिक (बैकेंड प्रकार) फ़िल्टर करने योग्य उत्पाद सूची में उपयोग किया जाता है प्रोमो नियमों के लिए उपयोग किया जाता है सिस्टम विशेषताओं द्वारा सॉर्ट किया जाता है प्रत्येक स्टोर के लिए एक अलग फ्लैट टेबल होती है, प्रत्येक में एक अलग स्टोर-स्कॉप्ड इकाई विशेषता मान होता है। प्रत्येक भाषा के लिए अलग-अलग स्टोर होने से बहुभाषी मूल्यों का प्रबंधन किया जाता है।
विशेषता दृश्यपटल, स्रोत और बैकएंड मॉडल के इंटरफ़ेस को लागू करें
फ्रंटेंड इंटरफ़ेस
/**
* Entity attribute frontend interface
*
* Frontend is providing the user interface for the attribute
*
*/
interface Mage_Eav_Model_Entity_Attribute_Frontend_Interface
{
}
स्रोत इंटरफ़ेस
/**
* Entity attribute select source interface
*
* Source is providing the selection options for user interface
*
*/
interface Mage_Eav_Model_Entity_Attribute_Source_Interface
{
/**
* Retrieve All options
*
* @return array
*/
public function getAllOptions();
/**
* Retrieve Option value text
*
* @param string $value
* @return mixed
*/
public function getOptionText($value);
}
बैकएंड इंटरफ़ेस
/**
* Entity attribute backend interface
*
* Backend is responsible for saving the values of the attribute
* and performing pre and post actions
*
*/
interface Mage_Eav_Model_Entity_Attribute_Backend_Interface
{
public function getTable();
public function isStatic();
public function getType();
public function getEntityIdField();
public function setValueId($valueId);
public function getValueId();
public function afterLoad($object);
public function beforeSave($object);
public function afterSave($object);
public function beforeDelete($object);
public function afterDelete($object);
/**
* Get entity value id
*
* @param Varien_Object $entity
*/
public function getEntityValueId($entity);
/**
* Set entity value id
*
* @param Varien_Object $entity
* @param int $valueId
*/
public function setEntityValueId($entity, $valueId);
}