बाल उत्पाद विशेषता द्वारा फ़िल्टर उत्पाद संग्रह


9

मेरे पास 2 विशेषता जैसी स्थिति है जो बाल उत्पाद को असाइन की गई है

1) person_height_fromऔर 2) person_height_toजिसमें ड्रॉपडाउन प्रकार विशेषता है

जो केवल बाल उत्पाद में असाइन किया गया है, लेकिन मूल उत्पादों में असाइन नहीं किया गया है,

मैं इस विशेषता के साथ श्रेणी पृष्ठ में उत्पाद संग्रह को फ़िल्टर करना चाहता हूं

पसंद length = 175

 $collection->addAttributeToFilter('person_height_from', array('lteq' => $length));

 $collection->addAttributeToFilter('person_height_to', array('gteq' => $length));

क्या यह केवल उन मूल उत्पादों को श्रेणी पृष्ठ में प्राप्त करना संभव है, जो बाल उत्पाद मूल्य से ऊपर प्रदान करते हैं

आपकी मदद तारीफ के काबिल होगी

जवाबों:


0

कृपया नीचे दिए गए कोड का उपयोग करें:

$collection = Mage::getModel('catalog/product')->getCollection()
    ->addAttributeToFilter(
        array(
            array('attribute'=> 'length', 'like' => '175')
        )
    );

$collection->getSelect()
    ->joinLeft(
        array('link_table' => 'catalog_product_super_link'),
        'link_table.product_id = e.entity_id',
        array('product_id', 'parent_id')
    );

$collection->getSelect()->group('link_table.parent_id');

foreach ($collection as $product) {
    $productIds[] = $product->getParentId();
}

$productCollection = Mage::getModel('catalog/product')->getCollection()
    ->addAttributeToFilter('entity_id', array('in' => $productIds));

उपरोक्त कोड में सबसे पहले मुझे ऐसे बाल उत्पाद मिले हैं जिनकी लंबाई 175 है। उसके बाद मुझे बाल उत्पाद से जुड़ी माता-पिता की आईडी मिल गई है, फिर मूल उत्पाद Ids के अनुसार उत्पाद संग्रह को फ़िल्टर करें।


1
क्या यह केवल 1 sql क्वेरी में करना संभव है, मेरे पास स्टोर में 1 लाख से अधिक उत्पाद हैं, यह इस संग्रह को प्राप्त करने के लिए प्रदर्शन पर बहुत प्रभाव
डालेगा

0

यहां मैंने आंतरिक क्वेरी के साथ खोज करने के लिए बाल उत्पादों की 2 विशेषता के साथ किया

$collection = $observer->getEvent()->getCollection();

// check if  query is already in sql then no need to add per event
$cloneSelect = clone $collection->getSelect();
$wherePart = $cloneSelect->getPart(Zend_Db_Select::WHERE);
$excludedWherePart = 'AND (e.entity_id IN';
foreach ($wherePart as $key => $wherePartItem) {
    if (strpos($wherePartItem, $excludedWherePart) !== false) {
        return $this;
    }
}

$resource = Mage::getSingleton('core/resource');
$_readAdapter = $resource->getConnection('core_read');
$status = Mage::getSingleton('catalog/config')->getAttribute('catalog_product', 'status');
$heightTo = Mage::getSingleton('catalog/config')->getAttribute('catalog_product', 'person_height_to');
$heightFrom = Mage::getSingleton('catalog/config')->getAttribute('catalog_product', 'person_height_from');
$categoryId = Mage::registry("current_category")->getId();
$storeId = Mage::app()->getStore()->getId();

$query = $_readAdapter->select()
    ->from(array('e' => $collection->getTable('catalog/product')),array())
    ->joinInner(array(
        'at_status' => $status->getBackendTable()),
        'at_status.entity_id = e.entity_id AND at_status.store_id = 0 AND at_status.attribute_id = ' .$status->getAttributeId(),
        array()
    )
    ->joinInner(array(
        'at_stock' => $resource->getTableName('cataloginventory/stock_item')),
        'at_stock.product_id = e.entity_id AND at_stock.is_in_stock = ' . 1,
        array()
    )
    ->joinInner(array(
        'cat_index' => $collection->getTable('catalog/category_product_index')),
        'cat_index.product_id = e.entity_id AND cat_index.store_id = ' . $storeId . ' AND cat_index.category_id = ' . $categoryId,
        array()
    )
    ->joinInner(array(
        'at_person_height_to' => $heightTo->getBackendTable()),
        'at_person_height_to.entity_id = e.entity_id AND at_person_height_to.store_id = 0 AND at_person_height_to.attribute_id = ' . $heightTo->getAttributeId(),
        array()
    )
    ->joinInner(array(
        'at_person_height_from' => $heightTo->getBackendTable()),
        'at_person_height_from.entity_id = e.entity_id AND at_person_height_from.store_id = 0 AND at_person_height_from.attribute_id = ' . $heightFrom->getAttributeId(),
    array()
    )
    ->where(
        "e.type_id = 'simple' AND at_person_height_from.value <= " . $length . " AND at_person_height_to.value >= " . $length
    )
    ->join(
        array('link_table' => 'catalog_product_super_link'),
        'link_table.product_id = e.entity_id', array('parent_id')
    );

$productIds =  array_map('intval', array_unique($_readAdapter->fetchCol($query)));

// add filter here with parent ids
$collection->addAttributeToFilter('entity_id', array('in' => $productIds));

आशा है कि यह दूसरों की मदद करेगा और बेहतर विचार प्राप्त करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.