Таблица oc_cart
Таблица oc_cart используется для хранения содержимого корзин покупателей до момента оформления заказа. Она позволяет сохранять выбранные товары даже после закрытия браузера, благодаря использованию уникальных идентификаторов сессий для гостей и привязке к учётной записи для авторизованных пользователей.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
cart_id |
int |
Уникальный идентификатор записи в корзине (автоинкремент). |
api_id |
int |
Идентификатор API-пользователя, если добавление в корзину было выполнено через API. Ссылается на oc_api.
|
customer_id |
int |
Идентификатор зарегистрированного покупателя. Ссылается на oc_customer. Для неавторизованных пользователей значение равно 0.
|
session_id |
varchar(32) |
Уникальный идентификатор сессии для неавторизованных (гостевых) покупателей. Позволяет сопоставить корзину с конкретным браузером. |
product_id |
int |
Идентификатор товара, добавленного в корзину. Ссылается на oc_product.
|
recurring_id |
int |
Идентификатор профиля recurring-платежей (для товаров с регулярной оплатой), если он был добавлен в корзину. |
option |
text |
Сериализованный массив (в формате JSON) с выбранными опциями для товара. Хранит ID опций и их значений. |
quantity |
int |
Количество единиц данного товара, добавленное в корзину. |
date_added |
datetime |
Дата и время добавления товара в корзину. |
Как это работает
При добавлении товара в корзину система создает запись в таблице oc_cart. Механизм работы отличается для авторизованных и неавторизованных пользователей:
Для зарегистрированных пользователей (customer_id > 0) корзина привязывается напрямую к их учётной записи. Это позволяет синхронизировать корзину между разными устройствами после авторизации.
Для гостевых пользователей (customer_id = 0) используется идентификатор сессии (session_id), который хранится в cookies браузера. Это позволяет сохранять корзину в течение жизни сессии или дольше, если используется длительная сессия.
При оформлении заказа все товары из корзины переносятся в таблицы заказа (oc_order_product и др.), а соответствующие записи из oc_cart удаляются. Для очистки старых, неиспользуемых корзин в OpenCart есть система CRON-задач.
Пример SQL-запроса
Посмотреть содержимое корзины для конкретного покупателя можно следующим запросом:
SELECT c.cart_id, c.quantity, c.date_added, p.product_id, pd.name
FROM oc_cart c
LEFT JOIN oc_product p ON (c.product_id = p.product_id)
LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id)
WHERE c.customer_id = 42
ORDER BY c.date_added DESC;
Смотрите также
-
таблицу
oc_customer,
в которой хранятся данные покупателей -
таблицу
oc_product,
в которой хранятся данные о товарах -
таблицу
oc_order,
в которой хранятся оформленные заказы -
таблицу
oc_order_product,
в которую переносятся товары из корзины при оформлении заказа