Стажировка на реальных проектах:
наполнение портфолио, помощь с работой и заказами, пробные собеседования. Жми для подробностей→
32 of 152 menu
Бесплатный курс: Практика на Реальных Проектах и Работы в Портфолио! Начало 11 ноября. Жми для записи!

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