Таблица oc_product_filter
Таблица oc_product_filter является промежуточной таблицей, которая связывает товары (таблица oc_product) с фильтрами (таблица oc_filter). Эта связь позволяет назначать товарам различные характеристики для фильтрации в каталоге.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
product_id |
int |
Идентификатор товара. Внешний ключ, ссылается на oc_product.
|
filter_id |
int |
Идентификатор фильтра. Внешний ключ, ссылается на oc_filter.
|
Как это работает
Система фильтров в OpenCart состоит из двух основных таблиц: oc_filter (хранит группы фильтров и сами фильтры) и oc_product_filter (связывает фильтры с товарами).
Когда администратор в карточке товара в разделе "Связи" назначает фильтры, система создает записи в таблице oc_product_filter. Каждая запись содержит пару product_id + filter_id.
На фронтенде, когда пользователь выбирает фильтры в категории, система выполняет поиск товаров, которые имеют соответствующие filter_id в таблице oc_product_filter.
Один товар может быть связан с несколькими фильтрами, и один фильтр может быть назначен нескольким товарам, что реализует отношение "многие-ко-многим".
Пример SQL-запроса
Получить все фильтры для конкретного товара:
SELECT f.filter_id, fd.name, fg.filter_group_id, fgd.name as group_name
FROM oc_product_filter pf
LEFT JOIN oc_filter f ON (pf.filter_id = f.filter_id)
LEFT JOIN oc_filter_description fd ON (f.filter_id = fd.filter_id AND fd.language_id = 1)
LEFT JOIN oc_filter_group fg ON (f.filter_group_id = fg.filter_group_id)
LEFT JOIN oc_filter_group_description fgd ON (fg.filter_group_id = fgd.filter_group_id AND fgd.language_id = 1)
WHERE pf.product_id = 42;
Найти все товары, которые имеют определенный фильтр:
SELECT p.product_id, pd.name
FROM oc_product_filter pf
LEFT JOIN oc_product p ON (pf.product_id = p.product_id)
LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id AND pd.language_id = 1)
WHERE pf.filter_id = 15;
Смотрите также
-
таблицу
oc_product,
которая содержит основные данные о товарах -
таблицу
oc_filter,
которая хранит информацию о фильтрах и группах фильтров -
таблицу
oc_filter_description,
которая содержит описания фильтров на разных языках -
таблицу
oc_filter_group,
которая хранит группы фильтров