Таблица oc_order_option
Таблица oc_order_option предназначена для хранения информации о всех опциях товаров, которые были выбраны покупателем при оформлении заказа. Каждая запись в этой таблице соответствует одной конкретной опции одного товара в заказе.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
order_option_id |
int |
Уникальный идентификатор записи об опции в заказе. Первичный ключ таблицы. |
order_id |
int |
Идентификатор заказа. Внешний ключ, ссылается на таблицу oc_order.
|
order_product_id |
int |
Идентификатор товара в заказе. Внешний ключ, ссылается на таблицу oc_order_product.
|
product_option_id |
int |
Идентификатор опции продукта. Ссылается на таблицу oc_product_option.
|
product_option_value_id |
int |
Идентификатор значения опции продукта. Ссылается на таблицу oc_product_option_value. Может быть 0 для опций типа "Текст", "Файл" или "Дата".
|
name |
varchar(255) |
Название опции на момент оформления заказа (сохраняется историческое значение). |
value |
text |
Значение опции, выбранное пользователем. Для опций выбора - название значения, для текстовых полей - введенный текст, для файлов - имя загруженного файла. |
type |
varchar(32) |
Тип опции (select, radio, checkbox, text, textarea, file, date, time, datetime). |
Как это работает
При добавлении товара с опциями в корзину, а затем при оформлении заказа, для каждой выбранной опции создается запись в таблице oc_order_option. Эта таблица обеспечивает постоянное хранение информации о том, какие именно опции были выбраны для каждого товара в заказе.
Важной особенностью является то, что в таблице сохраняются актуальные на момент заказа названия опций и их значений (поля name и value). Это гарантирует, что даже если администратор later изменит название опции или её значения в каталоге, исторические данные заказов останутся неизменными и корректными.
Связь с таблицей oc_order_product через order_product_id позволяет точно определить, к какому именно товару в заказе относится каждая опция. Один товар в заказе может иметь несколько опций, и для каждой будет создана отдельная запись.
Для опций, которые не имеют предопределенных значений (таких как текстовые поля, файлы), поле product_option_value_id будет равно 0, а в поле value будет храниться введенный пользователем текст или имя загруженного файла.
Пример SQL-запроса
Получить все опции для конкретного заказа можно следующим запросом:
SELECT oo.*, op.name as product_name, op.model
FROM oc_order_option oo
LEFT JOIN oc_order_product op ON (oo.order_product_id = op.order_product_id)
WHERE oo.order_id = 123
ORDER BY op.order_product_id, oo.order_option_id;
Смотрите также
-
таблицу
oc_order,
которая хранит основную информацию о заказах -
таблицу
oc_order_product,
которая содержит информацию о товарах в заказе -
таблицу
oc_product_option,
которая определяет доступные опции для товаров -
таблицу
oc_product_option_value,
которая хранит возможные значения для опций