Как посчитать товары, обладающие заданной характеристикой

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
#1 IgorN
  • Группа: Пользователь
  • Сообщений: 293
  • Регистрация: 09.03.2011

16.03.2011 19:17

Надо мне подсчитать кол-во продуктов по атрибутам.
Делаю так
 $collection = Mage::getModel('catalog/product')->getCollection();
 $collection->addCategoryFilter($category);

Затем добавляю атрибутыих может быть много

$collection->addAttributeToFilter('canape_ambiance', 14);


На выходе получаю 1 продукт, теперь мне надо проверить есть ли в этом продукте другой атрибут со значением (например 'test':5)
Пробовал так
if ($_product->loadByAttribute('test', 5)) {
    echo 'Yes'; 
}

Других методов не нашел и думал что этот метод то что нужно, но он походу посылает новый запрос и находит др. продукт, а не проверяет у текущего.

Запарился уже, как сделать правильно?

#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

16.03.2011 20:36

Правильная оптимизация в данном случае состоит не в том, чтобы уменьшить количество запросов SQL по подсчёту количества товаров при просмотре витрины покупателем, а в том, чтобы избавиться от этих запросов при просмотре витрины вовсе, вынеся все расчёты на этап индексации.

#3 IgorN
  • Группа: Пользователь
  • Сообщений: 293
  • Регистрация: 09.03.2011

16.03.2011 20:39

А как это сделать? Для меня пока темный лес. Мне бы хоть как то решить для начала.
Может просто добавить $collection->addAttributeToFilter('test', 5);//...
потом удалить этот атрибут (есть ли метод?) и добавить следующий.

#4 IgorN
  • Группа: Пользователь
  • Сообщений: 293
  • Регистрация: 09.03.2011

16.03.2011 21:36

А вообще как зная id атрибута(свойства) посчитать кол-во продуктов?
Еще вопрос метод addAttributeToFilter добавляет условие через AND если я правильно понял, а как сделать что бы было через OR?

Спасибо.

#5 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

17.03.2011 09:36

/** @var Mage_Eav_Model_Entity_Attribute_Abstract $attribute */

Mage
	::getResourceModel ("catalog/product_collection")
		->addAttributeToSelect ($attribute->getAttributeCode())
		->addAttributeToFilter ($attribute->getAttributeCode(), array('notnull'=>1))
		->count ()
;


#6 IgorN
  • Группа: Пользователь
  • Сообщений: 293
  • Регистрация: 09.03.2011

17.03.2011 10:25

Просмотр сообщенияДмитрий Федюк (17.03.2011 09:36) писал:

/** @var Mage_Eav_Model_Entity_Attribute_Abstract $attribute */

Mage
	::getResourceModel ("catalog/product_collection")
		->addAttributeToSelect ($attribute->getAttributeCode())
		->addAttributeToFilter ($attribute->getAttributeCode(), array('notnull'=>1))
		->count ()
;



Спасибо большое за ответ. По второму вопросу уже подсказали.
одиночный 
->addAttributeToFilter(’news_from_date’, array(’date’=>false, ‘to’=> $todayDate))

ИЛИ 
->addAttributeToFilter(array( 
array(’attribute’=>’news_to_date’, ‘date’=>true, ‘from’=>$todayDate), 
array(’attribute’=>’news_to_date’, ‘is’ => new Zend_Db_Expr(’null’)) 
),’’,’left’)


#7 IgorN
  • Группа: Пользователь
  • Сообщений: 293
  • Регистрация: 09.03.2011

17.03.2011 11:21

Возник еще вопрос, а как удалить фильтр добавленный методом addAttributeToFilter или ->addAttributeToSelect
Для последнего пробовал removeAttributeToSelect($attribute->getAttributeCode())
Но толку нет. Может обнулить коллекцию как то...

Мне надо добавить фильтр получить значение, затем обнулить коллекцию(удалить фильтр), добавить еще фильтр получить значение и т.д.
А сейчас кол-во считается не верно.

Поделиться темой: