Получить коллекцию продуктов на основе списка идентификаторов продуктов

Данный продукт idЯ могу запросить продукт, используя

Mage::getModel('catalog/product')->load($id);

У меня есть список идентификаторов (через запятую), я могу explode это, перебрать каждый идентификатор и запустить load($id) как выше. Я немного беспокоюсь о производительности. Это другой способ справиться с этим, что-то вроде where оговорка, с IN(id1,id2,id3,id4) вид синтаксиса. Я гуглю вокруг, и я вижу это

Mage::getModel('catalog/product')->getCollection()->addAtributeToSelect('*')

Я думаю, что я могу добавить фильтр к этому, верно? Кто-нибудь решал подобную проблему? Большое спасибо.

1

Решение

1) Отфильтруйте свою коллекцию, используя идентификаторы продуктов, которые у вас есть:

$productIds = explode(',', "1,2,3,4,5,6");
$collection = Mage::getModel('catalog/product')->getCollection()-
>addAttributeToFilter('entity_id', array('in' => $productIds));

2) Если вы хотите получить только определенную информацию, такую ​​как имя & sku и т. д., вы можете добавить атрибут для выбора, это означает, что коллекция будет получать только имя из таблиц базы данных, а не всю информацию о продукте, которую вы можете выбрать с помощью кода ниже

$collection->addAttributeToSelect(array('name','sku'));

3) Убедитесь, что весь этот код написан в блоках или моделях, а не в Phtmls, иначе это может определенно повлиять на скорость страницы.

4

Другие решения

В качестве требования пар вы можете использовать функцию finset magento, которая принимает массив в качестве параметра

Попробуйте использовать addAttributeToFilter с или условием

$collection->addAttributeToFilter($attribute,
array(
array('finset'=> array('237')),
array('finset'=> array('238')),
array('finset'=> array('239')),
)
);
Or

$collection->addAttributeToFilter(
array(
array('attribute'=> 'attributecode','finset' => array('237')),
array('attribute'=> 'attributecode','finset' => array('237')),
array('attribute'=> 'attributecode','finset' => array('237')),
)
);
1

По вопросам рекламы [email protected]