2012-02-14 15 views
6

मैं Magento (1.6) स्टोर के लिए श्रेणी रोल-अप रिपोर्ट विकसित करने पर काम कर रहा हूं।Magento: किसी उत्पाद द्वारा फ़िल्टर किए गए उत्पाद संग्रह के लिए आदेश आइटम संग्रह प्राप्त करें

इसके लिए, मैं उत्पादों के एक सबसेट के लिए ऑर्डर आइटम संग्रह प्राप्त करना चाहता हूं - वे उत्पाद जिनकी अद्वितीय श्रेणी आईडी (यह एक Magento उत्पाद विशेषता है जो मैंने बनाई है) एक विशेष मान से मेल खाते हैं।

मैं कैटलॉग/उत्पाद पर संग्रह के आधार पर प्रासंगिक परिणाम सेट प्राप्त कर सकता हूं।

$collection = Mage::getModel('catalog/product') 
->getCollection() 
->addAttributeToFilter('unique_category_id', '75') 
->joinTable('sales/order_item', 'product_id=entity_id', array('price'=>'price','qty_ordered' => 'qty_ordered')); 

Magento इसे पसंद नहीं करता है, क्योंकि एक ही उत्पाद आईडी के लिए डुप्लिकेट प्रविष्टियां हैं।

ऑर्डर आइटम के आधार पर यह परिणाम सेट प्राप्त करने के लिए मैं कोड कैसे तैयार करूं? एक विशेषता द्वारा फ़िल्टर किए गए उत्पाद संग्रह में शामिल होना मुझे छेड़छाड़ कर रहा है। यह कोड चाल नहीं कर रहा है, क्योंकि यह मानता है कि विशेषता ऑर्डर आइटम पर है, न कि उत्पाद।

$collection = Mage::getModel('sales/order_item') 
->getCollection() 
->join('catalog/product', 'entity_id=product_id') 
->addAttributeToFilter('unique_category_id', '75'); 

किसी भी मदद की सराहना की जाती है।

उत्तर

7

क्रॉस इकाई बनाने का एकमात्र तरीका संग्रह का चयन ऑब्जेक्ट के साथ एसक्यूएल का निर्माण करके साफ और कुशलता से काम करता है।

$attributeCode = 'unique_category_id'; 
$alias = $attributeCode.'_table'; 
$attribute = Mage::getSingleton('eav/config') 
    ->getAttribute(Mage_Catalog_Model_Product::ENTITY, $attributeCode); 

$collection = Mage::getResourceModel('sales/order_item_collection'); 
$select = $collection->getSelect()->join(
    array($alias => $attribute->getBackendTable()), 
    "main_table.product_id = $alias.entity_id AND $alias.attribute_id={$attribute->getId()}", 
    array($attributeCode => 'value') 
) 
->where("$alias.value=?", 75); 

यह मेरे लिए काफी अच्छा काम करता है। मैं eav_entity_type तालिका, फिर eav_attribute, फिर प्रदर्शन तालिका के लिए मूल्य तालिका इत्यादि में शामिल होने का पूरा तरीका छोड़ना चाहता हूं। चूंकि attribute_id इकाई विशिष्ट है, इसलिए यह आवश्यक है।
आपकी विशेषता के दायरे के आधार पर आपको स्टोर आईडी में भी जोड़ने की आवश्यकता हो सकती है।

+0

शानदार! धन्यवाद। – Laizer

+0

मैं इस कोड के साथ बिक्री/order_grid_collection में भी शामिल कैसे हो सकता हूं –

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