Таблица 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,
которая содержит основную информацию о товарах