Таблица oc_address
Таблица oc_address предназначена для хранения адресной книги клиентов. Каждый зарегистрированный пользователь может сохранить несколько адресов для доставки и оплаты, чтобы не вводить их каждый раз при оформлении заказа.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
address_id |
int |
Уникальный идентификатор адреса. |
customer_id |
int |
Внешний ключ, который связывает адрес с конкретным клиентом. Ссылается на таблицу oc_customer.
|
firstname |
varchar(32) |
Имя человека, связанного с этим адресом. |
lastname |
varchar(32) |
Фамилия человека, связанного с этим адресом. |
company |
varchar(60) |
Название компании (если адрес является юридическим). |
address_1 |
varchar(128) |
Первая строка адреса (например, улица, дом, квартира). Это основная часть адреса. |
address_2 |
varchar(128) |
Вторая строка адреса (например, район, дополнительная информация). Может быть пустым. |
city |
varchar(128) |
Город / Населенный пункт. |
postcode |
varchar(10) |
Почтовый индекс. |
country_id |
int |
ID страны. Внешний ключ для таблицы oc_country.
|
zone_id |
int |
ID региона (области, штата, края) внутри выбранной страны. Внешний ключ для таблицы oc_zone.
|
custom_field |
text |
Поле для хранения пользовательских полей, которые могут быть настроены в админ-панели OpenCart для адреса. Данные хранятся в формате JSON. |
Как это работает
Пользователь регистрируется на сайте, и в таблице oc_customer создается запись с его customer_id. В своем личном кабинете (в разделе "Адресная книга") он может добавить новый адрес (например, "Дом", "Работа"). При добавлении данные записываются в oc_address, где customer_id равен ID этого пользователя.
При оформлении заказа клиент может выбрать один из ранее сохраненных адресов из своей адресной книги для доставки и для оплаты. Система берет address_id выбранного адреса и подставляет все данные (город, индекс, улицу) в заказ.
Важно понимать, что таблица oc_address не связана напрямую с заказами (oc_order). При оформлении заказа данные адреса копируются в таблицу oc_order (поля payment_*, shipping_*) для исторической сохранности. Это нужно для того, чтобы даже если клиент потом удалит или изменит адрес в своей адресной книге, информация в уже созданном заказе останется неизменной.
Поля country_id и zone_id обеспечивают связь со справочниками стран и регионов, что позволяет корректно отображать их названия на разных языках и рассчитывать стоимость доставки.
Пример SQL-запроса
Посмотреть все адреса конкретного клиента можно следующим запросом:
SELECT a.*, c.name as country_name, z.name as zone_name
FROM oc_address a
LEFT JOIN oc_country c ON (a.country_id = c.country_id)
LEFT JOIN oc_zone z ON (a.zone_id = z.zone_id)
WHERE a.customer_id = 5;
Смотрите также
-
таблицу
oc_product,
которая содержит поля продукта -
таблицу
oc_category,
которая хранит информацию о категориях -
таблицу
oc_category,
которая хранит информацию о категориях -
таблицу
oc_category,
которая хранит информацию о категориях