Стажировка на реальных проектах:
наполнение портфолио, помощь с работой и заказами, пробные собеседования. Жми для подробностей→
21 of 152 menu
Внимание! Репетиторство по Python! Осталось последнее место! Стоимость: 20$ за занятие 1.5 часа. Жми для подробностей!

Таблица oc_product_option_value

Таблица oc_product_option_value является ключевой для реализации функционала опций товаров в OpenCart. Она хранит конкретные комбинации "товар-опция-значение" и определяет, как наличие, цена и вес товара изменяются в зависимости от выбранных покупателем опций.

Поля

Поле Тип данных Описание
product_option_value_id int Уникальный идентификатор связи товара и значения опции (первичный ключ, автоинкремент).
product_option_id int Внешний ключ, связывающий запись с конкретной опцией товара. Ссылается на oc_product_option.
product_id int Внешний ключ, идентификатор товара. Ссылается на oc_product.
option_id int Внешний ключ, идентификатор типа опции (радиокнопка, select, checkbox и т.д.). Ссылается на oc_option.
option_value_id int Внешний ключ, идентификатор конкретного значения опции (например, "Красный", "Размер XL"). Ссылается на oc_option_value.
quantity int Количество товара на складе для данной конкретной комбинации опций. Если опция влияет на остатки, то именно это поле определяет, доступен ли товар с этой опцией для заказа.
subtract tinyint(1) Флаг 1 или 0, указывающий, нужно ли вычитать данное количество quantity со склада при покупке товара с этой опцией.
price decimal(15,4) Наценка или скидка на базовую цену товара, применяемая при выборе этого значения опции. Может быть положительной или отрицательной.
price_prefix varchar(1) Префикс для цены опции. Определяет, как значение price применяется к базовой цене: + - прибавить, - - вычесть.
points decimal(15,4) Количество бонусных баллов, которое добавляется или вычитается из стоимости товара в баллах при выборе этой опции.
points_prefix varchar(1) Префикс для баллов. + - прибавить, - - вычесть.
weight decimal(15,4) Изменение веса товара при выборе этого значения опции.
weight_prefix varchar(1) Префикс для веса. + - прибавить, - - вычесть.

Как это работает

Когда администратор добавляет опцию к товару (например, "Цвет" или "Размер") и задает для нее значения, для каждого значения создается запись в таблице oc_product_option_value. Эта запись связывает product_id, option_id и option_value_id.

Поля quantity и subtract позволяют управлять остатками для каждой вариации товара независимо. Например, для футболки может быть 10 шт. размера M и 5 шт. размера L. При покупке футболки размера L со склада будет вычтена 1 единица из поля quantity для этой опции.

Поля price и price_prefix определяют, как опция влияет на конечную стоимость товара. Например, если базовая цена товара 1000 руб., а для опции "Золотая отделка" установлено price = 200 и price_prefix = +, то итоговая цена составит 1200 руб.

Аналогичным образом работают пары полей для расчета веса (weight, weight_prefix) и стоимости в бонусных баллах (points, points_prefix).

Пример SQL-запроса

Получить все доступные опции для товара с ID 42, отсортированные по цене:

SELECT pov.product_option_value_id, od.name as option_name, ovd.name as value_name, pov.quantity, pov.price, pov.price_prefix, pov.weight, pov.weight_prefix FROM oc_product_option_value pov LEFT JOIN oc_option_value ov ON (pov.option_value_id = ov.option_value_id) LEFT JOIN oc_option_value_description ovd ON (ov.option_value_id = ovd.option_value_id AND ovd.language_id = 1) LEFT JOIN oc_option_description od ON (pov.option_id = od.option_id AND od.language_id = 1) WHERE pov.product_id = 42 ORDER BY pov.price;

Смотрите также

  • таблицу oc_product_option,
    которая хранит связь товара с опцией
  • таблицу oc_option,
    которая определяет типы опций
  • таблицу oc_option_value,
    которая хранит возможные значения опций
  • таблицу oc_product,
    которая содержит основную информацию о товарах