@page404

Возможна ли такая реализация (backend php)?

Требуется получить данные для определенного вида, которые берутся из БД.
5fad60b719153152945284.jpeg
Описание схемы:
-контроллер дает запрос на получение данных для таблицы1.
-репозиторий определяет какие данные требуются для таблицы 1 и отдает классу который выполняет запросы в БД те самые переменные.
-данные возвращаются в репозиторий , там если требуется то что нибудь обрабатывается создает модели и отдает контроллеру .
Вопрос: как правильно организовать определение требуемых переменных и соответственно организация самих sql запросов . ведь может быть сотни переменных, и под каждую переменную добавлять в файл свой запрос как то думаю не то, ведь они могут отличаться всего то аргументами для фильтров в запросе.
  • Вопрос задан
  • 332 просмотра
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Вопрос не очень понятен. Если проблема в том что для получения различных данных требуется один и тот же запрос, то разумеется не нужно этот запрос дублировать. Запрос будет один, и "репозиторий" будет выполнять его с разными входящими данными.

Правда, традиционно "файл с SQL запросами" обычно называется репозиторием , а "репозиторий" - сервисом или хелпером.

В общем, нормальная структура такая

1. Класс "запросы в БД". "Подтягивает" к себе соединение с с БД
2. Класс репозиторий. Подтягивает к себе класс "запросы в БД". Каждый метод возвращает структуру данных, очень условно говоря - "модель".
3. Контроллер выполняет методы репозитория, получая "модели", и формируя "переменные" на основании данных из этих "моделей". При этом СОВСЕМ не обязательно чтобы одной "переменной" соответствовала одна "модель", а для каждой "модели" писался свой запрос.
Модель может содержать сразу много переменных. Например агрегирующие можели могут сразу возвращать и среднее и максимальное и и манимальное значение. А контроллер уже решит акое ему надо
Самое главное, запросы можно формировать динамически! Если у тебя запрос который выводит данные за все время, к нему просто добавить условие, что если в метод репозитория переданы даты, то к запросу добавляется выборка по датам. И сразу получается что метод в репозитории один!
То же самое касается и других условий. Надо только синие утюги? Нет проблем - в тот же самый метод добавляется проверка на наличие цвета в условиях и если есть - это условие добавляется в запрос.

то есть запросы
SELECT count(field) FROM table WHERE a<100;
SELECT count(field) FROM table WHERE a=1 AND field_1 = 'd'; 
SELECT count(field) FROM table WHERE a=1 AND field_1 = 'd'  and date between 2019 and 2020;

это ОДИН метод
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы