Files
new.rybstock.ru/docs/ШАГ_2_БАЗА_ДАННЫХ.md
T
2026-06-03 23:24:10 +03:00

5.3 KiB

Шаг 2. База данных и связи

Что сделано

Создана SQL-схема database/schema.sql для MariaDB/MySQL и стартовые данные database/seed.sql.

Также создана локальная страница установки public/install.php.

Она применяет:

  • database/schema.sql;
  • database/seed.sql.

Важно: установка пересоздает таблицы, поэтому использовать ее только на старте или в локальной разработке.

Схема покрывает основные части проекта:

  • администраторы;
  • категории и подкатегории;
  • товары;
  • фасовки и цены;
  • изображения товаров;
  • поисковые термины;
  • промокоды и их привязки;
  • расчеты доставки;
  • заказы и позиции заказов;
  • история статусов заказа;
  • вход клиента по email-коду;
  • отзывы;
  • акции;
  • популярные товары;
  • настройки сайта;
  • праздничные/нерабочие дни.

Главная логика связей

Категории

Таблица categories поддерживает вложенность через parent_id.

Это позволяет хранить:

  • главные категории;
  • подкатегории;
  • меню каталога;
  • SEO-текст для страниц категорий.

Товары

Таблица products хранит основную карточку товара:

  • название;
  • slug;
  • категорию;
  • описание;
  • основное фото;
  • базовую единицу;
  • режим отображения цены;
  • публикацию;
  • доступность;
  • признаки "новинка", "хит", "акция".

Фасовки

Таблица product_variants хранит отдельные фасовки товара.

Именно фасовка попадает в корзину, а не просто товар.

Пример:

  • товар: горбуша неразделанная;
  • фасовка: пласт 10 кг;
  • package_quantity: 10;
  • step_quantity: 10;
  • price_per_unit: 600;
  • package_price: 6000.

Так можно корректно сделать плюс/минус кратно фасовке.

Заказы

Таблица orders хранит заказ целиком:

  • имя;
  • телефон;
  • email;
  • тип получения;
  • адрес;
  • суммы;
  • промокод;
  • расчет доставки;
  • статус.

Таблица order_items хранит снимок каждой позиции заказа.

Снимок нужен, чтобы старые заказы не менялись при изменении цены или названия товара в каталоге.

Промокоды

Таблица promocodes хранит сам промокод.

Таблица promocode_targets хранит ограничения:

  • на категорию;
  • на товар.

Если промокод действует на весь заказ, targets не нужны.

Доставка

Таблица delivery_calculations хранит результат расчета:

  • тип доставки;
  • адрес;
  • сумма заказа;
  • расстояние от МКАД;
  • порог бесплатной доставки;
  • стоимость доставки;
  • стоимость подъема;
  • объяснение расчета.

Это нужно, чтобы в заказе сохранялся расчет, который видел клиент.

История заказов по email

Таблица customer_login_codes хранит одноразовые коды входа по email.

SMS не используются.

Настройки

Таблица site_settings хранит настройки сайта:

  • телефон;
  • email администратора;
  • правила доставки;
  • температуры камер;
  • тексты и числовые параметры.

Как применить схему

  1. Открыть в браузере /install.php?token=rybstock-local-install.
  2. Нажать кнопку "Создать таблицы и стартовые данные".
  3. После успешной установки база будет содержать таблицы проекта и стартовые категории/настройки.

Страница работает только при APP_ENV=local и правильном INSTALL_TOKEN из .env.

Что нужно сделать следующим шагом

Шаг 3:

  1. Создать базовые PHP-классы для работы с таблицами:
    • CategoryRepository;
    • ProductRepository;
    • ProductVariantRepository;
    • OrderRepository;
    • PromocodeRepository;
    • SettingRepository.
  2. Сделать первый вывод категорий на главной странице.
  3. Подготовить основу админки: вход администратора и список разделов.