Таблица oc_order_product
Таблица oc_order_product является одной из ключевых таблиц в системе OpenCart, так как хранит детализированную информацию о составе каждого заказа. В ней фиксируются все товары, их количество, цена на момент покупки и другие важные атрибуты.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
order_product_id |
int |
Уникальный идентификатор позиции в заказе (автоинкремент). |
order_id |
int |
Внешний ключ, связывающий позицию с конкретным заказом. Ссылается на oc_order.
|
product_id |
int |
Внешний ключ, связывающий позицию с товаром из каталога. Ссылается на oc_product.
|
name |
varchar(255) |
Название товара на момент оформления заказа. Сохраняется для истории, даже если название товара в каталоге будет изменено. |
model |
varchar(64) |
Модель или артикул товара на момент оформления заказа. |
quantity |
int |
Количество единиц данного товара в заказе. |
price |
decimal(15,4) |
Цена за единицу товара на момент оформления заказа (без учета налогов). |
total |
decimal(15,4) |
Общая стоимость позиции, рассчитанная как price * quantity (без учета налогов).
|
tax |
decimal(15,4) |
Сумма налога для данной позиции. |
reward |
int |
Количество бонусных баллов, которые были начислены покупателю за покупку этого товара. |
Как это работает
Когда клиент оформляет заказ, система создает запись в таблице oc_order, получая её order_id. После этого для каждого товара в корзине создается отдельная запись в таблице oc_order_product, где order_id равен ID созданного заказа.
Критически важно, что в эту таблицу сохраняются актуальные на момент покупки данные: название, модель, цена. Это гарантирует, что история заказов останется неизменной, даже если администратор позже отредактирует товар в каталоге, изменит его цену или артикул.
Поле product_id позволяет связать позицию в заказе с актуальным товаром в каталоге. Это используется для отображения актуального товара в истории заказов, для ведения учета остатков (вычитание quantity) и для системы отзывов (чтобы оставить отзыв можно было только на купленный товар).
Поля price, total и tax являются основой для финансовой отчетности и расчета итоговой суммы заказа.
Пример SQL-запроса
Получить полный список товаров для конкретного заказа можно следующим запросом:
SELECT op.*
FROM oc_order_product op
WHERE op.order_id = 42
ORDER BY op.order_product_id;
Получить детальную информацию о товарах в заказе с названиями из каталога:
SELECT
op.name as ordered_name,
op.price as ordered_price,
op.quantity,
p.product_id,
p.price as current_price,
p.model as current_model
FROM oc_order_product op
LEFT JOIN oc_product p ON (op.product_id = p.product_id)
WHERE op.order_id = 42;
Смотрите также
-
таблицу
oc_order,
которая хранит основную информацию о заказах -
таблицу
oc_order_option,
которая хранит опции для товаров в заказе -
таблицу
oc_product,
которая содержит данные о товарах в каталоге