Таблица oc_zone_to_geo_zone
Таблица oc_zone_to_geo_zone является связующей таблицей в системе OpenCart, которая определяет, к какой геозоне (географической зоне) принадлежат конкретные страны и регионы. Эта связь критически важна для корректной работы модулей доставки и налогов, которые зависят от местоположения покупателя.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
zone_to_geo_zone_id |
int |
Уникальный идентификатор связи между зоной и геозоной. Первичный ключ таблицы. |
country_id |
int |
Идентификатор страны. Внешний ключ, ссылается на таблицу oc_country.
|
zone_id |
int |
Идентификатор региона (области, штата). Внешний ключ, ссылается на таблицу oc_zone. Если значение равно 0, правило применяется ко всей стране.
|
geo_zone_id |
int |
Идентификатор геозоны. Внешний ключ, ссылается на таблицу oc_geo_zone.
|
date_added |
datetime |
Дата и время создания связи. |
date_modified |
datetime |
Дата и время последнего изменения связи. |
Как это работает
Геозоны (oc_geo_zone) - это логические группы стран и регионов, создаваемые администратором для применения определенных бизнес-правил. Например, можно создать геозону "Европа" и включить в нее все страны Евросоюза, или геозону "Центральный регион" для определенных областей страны.
Таблица oc_zone_to_geo_zone определяет состав этих геозон. Каждая запись в этой таблице говорит: "Эта страна (и опционально регион) принадлежит этой геозоне".
При оформлении заказа система определяет страну и регион покупателя на основе адреса доставки или оплаты. Затем через таблицу oc_zone_to_geo_zone определяется, к каким геозонам принадлежит это местоположение. Эта информация используется для:
- Выбора доступных способов доставки (модули доставки часто привязаны к геозонам)
- Расчета налогов (налоговые ставки привязываются к геозонам)
- Применения специальных цен или акций для определенных регионов
Важной особенностью является иерархия совпадений. Если для региона установлено конкретное правило (zone_id > 0), оно имеет приоритет над общим правилом для всей страны (zone_id = 0).
Пример SQL-запроса
Посмотреть все связи для конкретной геозоны можно следующим запросом:
SELECT ztgz.*, c.name as country_name, z.name as zone_name, gz.name as geo_zone_name
FROM oc_zone_to_geo_zone ztgz
LEFT JOIN oc_country c ON (ztgz.country_id = c.country_id)
LEFT JOIN oc_zone z ON (ztgz.zone_id = z.zone_id)
LEFT JOIN oc_geo_zone gz ON (ztgz.geo_zone_id = gz.geo_zone_id)
WHERE ztgz.geo_zone_id = 3
ORDER BY c.name, z.name;
Смотрите также
-
таблицу
oc_geo_zone,
которая хранит определения геозон -
таблицу
oc_country,
которая содержит список стран -
таблицу
oc_zone,
которая содержит список регионов -
таблицу
oc_tax_rate,
которая использует геозоны для применения налоговых ставок