Основні трюки при роботі з колекцією товарів в Magento

Будь-який розробник, який працює з Magento, рано чи пізно зіткнеться з колекціями товарів. Практично для будь-якого інтернет-магазину на CMS Magento вкрай важливо правильно і ефективно використовувати вибірку, фільтрацію і сортування товарів. У цій статті ми спробуємо зібрати основні сніпети, які будуть корисні розробникам Мадженто будь-якого рівня при роботі з колекціями товарів.

 

Завантаження колекції товарів

Існує два основних способи завантаження колекції товарів. Ви можете викликати метод getCollection() в екземплярі моделі товару, або завантажувати клас колекції в фабричному методі getResourceModel().

$collection = Mage::getModel('catalog/product')->getCollection();
$collection = Mage::getResourceModel('catalog/product_collection');

 

Додавання атрибутів в колекцію

Модель товару – це величезний набір даних, і чим більше атрибутів ми додаємо до вибірки, тим більше часу потрібно для її завантаження. За замовчуванням Magento завантажує тільки базові дані, які знаходяться в таблиці catalog_product_entity (такі, як ID, SKU, ідентифікатор типу об’єкта і т.д.).

 

Додавання всіх атрибутів у вибірку

$collection->addAttributeToSelect('*');

 

Додавання деяких атрибутів в вибірку

$collection->addAttributeToSelect('name', 'description', 'brand');

 

Додавання атрибутів особливих цін у вибірку

$collection->addMinimalPrice();
$collection->addFinalPrice();
$collection->addTaxPercents();

 

Додавання ідентифікаторів категорій у вибірку

$collection->addCategoryIds();

 

Додавання інформації цінових правил у вибірку

$collection->addTierPriceData();

 

Додавання переадресації URL товару

$collection->addUrlRewrite();

 

Фільтрація колекції товарів

Тип EAV сутності дозволяє отримувати доступ до чудового методу addAttributeToFilter() на додаток до стандартного addFieldToFilter(), який може приймати більш широкий діапазон аргументів.

Нижче перераховані основні умови для фільтра, які використовуються в запиті MySQL:

 

ДОРІВНЮЄ

$collection->addAttributeToFilter('status', array('eq' => 1));

 

НЕ ДОРІВНЮЄ

$collection->addAttributeToFilter('visibility', array('neq' => 1));

 

БІЛЬШЕ НІЖ

$collection->addAttributeToFilter('price', array('gt' => 5));

 

МЕНШЕ НІЖ

$collection->addAttributeToFilter('price', array('lt' => 10));

 

БІЛЬШЕ АБО ДОРІВНЮЄ

$collection->addAttributeToFilter('price', array('gteq' => 15));

 

МЕНШЕ АБО ДОРІВНЮЄ

$collection->addAttributeToFilter('price', array('lteq' => 4));

 

МІСТИТЬ – % (знаки підстановки)

$collection->addAttributeToFilter('sku', array('like' => 'COMP%'));

 

НЕ МІСТИТЬ – % (знаки підстановки)

$collection->addAttributeToFilter('sku', array('nlike' => 'ABC%'));

 

МІСТИТЬСЯ В МАСИВІ

$collection->addAttributeToFilter('entity_id', array('in' => array(1,5,15)));

 

НЕ МІСТИТЬСЯ В МАСИВІ

$collection->addAttributeToFilter('entity_id', array('nin' => array(1,5,15)));

 

НУЛЬОВИЙ

$collection->addAttributeToFilter('description', 'null');

 

НЕ НУЛЬОВИЙ

$collection->addAttributeToFilter('description', 'notnull');

 

Фільтрація результатів

Ви також можете використовувати наступні загальні фільтри:

 

ФІЛЬТР ТОВАРІВ ПО ID

$collection->addIdFilter(array(100,250,501));

 

ФІЛЬТР ПО ПОТОЧНОМУ МАГАЗИНУ

$collection->addStoreFilter();

 

ФІЛЬТР ПО ПОТОЧНОМУ ВЕБ-САЙТУ

$collection->addWebsiteFilter();

 

ФІЛЬТР ПО КАТЕГОРІЇ

$id = Mage::app()->getStore()->getStoreId(); // отримуємо ID магазина
$collection->setStoreId($id)->addCategoryFilter($category);

 

Сортування колекції

Отримані результати вибірки ми можемо сортувати за обраним атрибуту в порядку зростання, зменшення, або рандомно.

 

СОРТУВАННЯ В ПОРЯДКУ ЗРОСТАННЯ

$collection->setOrder('price', 'ASC');

 

СОРТУВАННЯ В ПОРЯДКУ ЗМЕНШЕННЯ

$collection->setOrder('name', 'DESC');

 

РАНДОМНЕ СОРТУВАННЯ

$collection->setOrder('rand()');

 

Обмеження для вибірки колекції

Якщо вам потрібно отримати колекцію товарів, але ви хочете обмежити кількість результатів до певного ліміту, ви можете використовувати метод setPageSize() і передати в якості аргументу ліміт. Це особливо корисно, якщо ваша колекція містить сотні тисяч даних – так вам не потрібно буде виконувати складні операції з колекцією такого розміру.

Ця функція обмежує кількість результатів, що повертаються, використовуючи, в основному, SQL запит LIMIT X. Наприклад:

$collection->setPageSize(105);

 

Схожий результат можна отримати, якщо використовувати іншу конструкцію:

$collection->getSelect()->limit(50); // поверне перші 50 результатів

 

Якщо вам потрібно отримати певну кількість товарів з певної стартової точки, тоді використовуйте метод setPage(). Він дозволяє вказати два параметри: перший параметр – стартова точка, другий – кількість результатів. Цей метод формує SQL запит виду LIMIT 0,50. Наприклад:

$collection->setPage(0,50); // поверне перші 50 товарів
$collection->setPage(25,10); // поверне 10 товарів після 25-го

 

Підрахунок результатів

$collection->count();

 

Отримання ID товарів
Іноді потрібно отримати тільки ідентифікатори товарів з колекції, але не інші дані товарів. Для цього завдання ви можете використовувати метод getAllIds().

$collection->getAllIds();

 

Налагодження колекції
Хочете знати, який SQL запит відправляється в базу даних? Використовуйте для цього метод getSelect().

$collection->getSelect();

 

 

Класи по роботі з колекціями в Magento дуже ефективні, і вони дозволяють легко робити запити і фільтрацію даних, навіть без будь-яких знань MySQL.

Прокоментуйте, будь ласка, дану статтю в формі коментування нижче!

 

Recent Posts

Антидетект-браузери для початківців: що це таке (на прикладі Dolphin чи AdsPower) і як їх правильно поєднати з мобільними проксі

Анонімність та розділення акаунтів є базовою потребою для співробітників, що займаються арбітражем трафіку, SMM чи…

2 тижні ago

Коли точно настав час здати старий каталізатор для вигідного продажу

Деякі запчастини в автомобілях ми експлуатуємо доти, доки вони повністю не вийдуть з ладу. Однак…

2 тижні ago

Як онлайн-моніторинг цін конкурентів допомагає бізнесу у 2026 році

В 2026 році конкуренція в e-commerce стала жорсткою як ніколи. Клієнти вибирають не тільки за…

3 тижні ago

5 аграрних помилок, які коштують врожаю, але про них рідко говорять

Урожай найчастіше втрачають не через аномальні зміни погоди, а через дрібні рішення, які здаються неважливими.…

1 місяць ago

Музичні інструменти, історія, класифікація та роль у культурі людства

Музичні інструменти супроводжують людство протягом усієї його історії. Вони з'явилися задовго до писемності і стали…

1 місяць ago

VR-продакшн, повний цикл створення віртуальної реальності

VR-продакшн сьогодні є окремим напрямком у цифровому виробництві, що поєднує технології віртуальної реальності, 3D-графіку, програмування,…

1 місяць ago