Данный продукт id
Я могу запросить продукт, используя
Mage::getModel('catalog/product')->load($id);
У меня есть список идентификаторов (через запятую), я могу explode
это, перебрать каждый идентификатор и запустить load($id)
как выше. Я немного беспокоюсь о производительности. Это другой способ справиться с этим, что-то вроде where
оговорка, с IN(id1,id2,id3,id4)
вид синтаксиса. Я гуглю вокруг, и я вижу это
Mage::getModel('catalog/product')->getCollection()->addAtributeToSelect('*')
Я думаю, что я могу добавить фильтр к этому, верно? Кто-нибудь решал подобную проблему? Большое спасибо.
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, иначе это может определенно повлиять на скорость страницы.
В качестве требования пар вы можете использовать функцию 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')),
)
);