6.5 KiB
Шаг 2. База данных и связи
Что сделано
Создана SQL-схема database/schema.sql для MariaDB/MySQL и стартовые данные database/seed.sql.
Также создана локальная страница установки public/install.php.
Она применяет:
database/schema.sql;database/seed.sql.
Важно: установка пересоздает таблицы, поэтому использовать ее только на старте или в локальной разработке.
Схема покрывает основные части проекта:
- администраторы;
- категории и подкатегории;
- товары;
- фасовки и цены;
- изображения товаров;
- поисковые термины;
- промокоды и их привязки;
- расчеты доставки;
- заказы и позиции заказов;
- история статусов заказа;
- вход клиента по email-коду;
- отзывы;
- акции;
- популярные товары;
- настройки сайта;
- праздничные/нерабочие дни.
- старые URL и 301-редиректы для сохранения индексации.
Главная логика связей
Категории
Таблица categories поддерживает вложенность через parent_id.
Это позволяет хранить:
- главные категории;
- подкатегории;
- меню каталога;
- SEO-текст для страниц категорий.
Для переноса со старого сайта у категорий есть поле legacy_path. Если старый URL отличается от нового slug, старый путь нужно сохранить и добавить 301-редирект в таблицу redirects.
Для SEO у категорий есть поля h1, seo_title, seo_description, seo_keywords.
Товары
Таблица products хранит основную карточку товара:
- название;
- slug;
- категорию;
- описание;
- основное фото;
- базовую единицу;
- режим отображения цены;
- публикацию;
- доступность;
- признаки "новинка", "хит", "акция".
Для товаров также есть поле legacy_path, чтобы переносить старые ссылки без потери индексации.
Для SEO у товаров есть поля h1, seo_title, seo_description, seo_keywords.
Фасовки
Таблица product_variants хранит отдельные фасовки товара.
Именно фасовка попадает в корзину, а не просто товар.
Пример:
- товар: горбуша неразделанная;
- фасовка: пласт 10 кг;
package_quantity: 10;step_quantity: 10;price_per_unit: 600;package_price: 6000.
Так можно корректно сделать плюс/минус кратно фасовке.
Заказы
Таблица orders хранит заказ целиком:
- имя;
- телефон;
- email;
- тип получения;
- адрес;
- суммы;
- промокод;
- расчет доставки;
- статус.
Таблица order_items хранит снимок каждой позиции заказа.
Снимок нужен, чтобы старые заказы не менялись при изменении цены или названия товара в каталоге.
Промокоды
Таблица promocodes хранит сам промокод.
Таблица promocode_targets хранит ограничения:
- на категорию;
- на товар.
Если промокод действует на весь заказ, targets не нужны.
Для отображения выгодных цен в каталоге у промокодов есть поля:
show_in_price_tiers- показывать как градацию цены;price_tier_label- подпись для карточки товара.
Так можно показывать покупателю базовую цену, цену от 20 000 руб. наличными и цену от 50 000 руб. наличными.
Доставка
Таблица delivery_calculations хранит результат расчета:
- тип доставки;
- адрес;
- сумма заказа;
- расстояние от МКАД;
- порог бесплатной доставки;
- стоимость доставки;
- стоимость подъема;
- объяснение расчета.
Это нужно, чтобы в заказе сохранялся расчет, который видел клиент.
История заказов по email
Таблица customer_login_codes хранит одноразовые коды входа по email.
SMS не используются.
Настройки
Таблица site_settings хранит настройки сайта:
- телефон;
- email администратора;
- правила доставки;
- температуры камер;
- тексты и числовые параметры.
Как применить схему
- Открыть в браузере
/install.php?token=rybstock-local-install. - Нажать кнопку "Создать таблицы и стартовые данные".
- После успешной установки база будет содержать таблицы проекта и стартовые категории/настройки.
Страница работает только при APP_ENV=local и правильном INSTALL_TOKEN из .env.
Что нужно сделать следующим шагом
Шаг 3:
- Создать базовые PHP-классы для работы с таблицами:
CategoryRepository;ProductRepository;ProductVariantRepository;OrderRepository;PromocodeRepository;SettingRepository.
- Сделать первый вывод категорий на главной странице.
- Подготовить основу админки: вход администратора и список разделов.