Magento — Фильтр по атрибуту

#magento #attributes

#magento #атрибуты

Вопрос:

У меня есть атрибут, определенный для продукта, который будет содержать список значений, разделенных запятыми. Идея, стоящая за этим, заключается в том, чтобы я мог сопоставлять этот продукт с другим продуктом.

псевдокод выглядел бы примерно так: найдите все продукты, у которых атрибут «cross_ref» имеет вид ‘34%’

Атрибут cross_ref будет содержать что-то вроде «1234 5678, abcd» и т.д. Я пробовал следующее, но он не возвращает никаких продуктов:

 $collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('*');
$collection->addFieldToFilter('cross_ref',array('like'=> '1234'));
//$collection->addAttributeToFilter('cross_ref',array('like'=> '1234')); // This didn't work either
foreach ($collection as $product) {
        var_dump($product->getData());
}
  

Однако этот код ничего не возвращает.

Есть идеи, как я могу этого добиться?

Спасибо

Ответ №1:

Похоже, вы забыли знак%, чтобы соответствовать подразделу строки: 'like' => '34%' .

Однако, если вы не хотите, чтобы 1234 совпадало с 12345, вы можете захотеть включить запятую в запрос, а также разрешить отсутствие запятых в начале или конце строки:

 $collection->addFieldToFilter('cross_ref', array(
    array('like'=> '%,1234,%'),
    array('like'=> '1234,%'),
    array('like'=> '%,1234'),
));
  

Комментарии:

1. Боже! Спасибо, что заметили это. Теперь все работает так, как ожидалось. Спасибо