Где вы храните запросы к базе в коде или используйте хранимые процедуры?

Интересно ваш опыт где вы храните запросы к базе или используйте хранимые процедуры.
В проекте много запросов (трёхэтажных, типо отчёты),
И я на стороне бэка на php собираю запрос на основе входных данных(фильтров) как конструктор.
Все хорошо работает, пока бизнес не меняет логику, меняться запрос и получается много переделывать.
Подскажите есть какие то стандартные подходы решение этой проблемы
Спасибо
  • Вопрос задан
  • 555 просмотров
Решения вопроса 2
DevMan
@DevMan
есть 2 основных подхода: максимум логики в бд и максимум логики в приложении.
первый был актуален в давние времена, когда компьютеры были медленными.
сейчас, когда железо дешевеет, а труд специалистов дорожает, превалирует второй подход. у которого с одной стороны есть недостаток в виде возможной просадки по скорости, но с другой стороны нет необходимости держать в штате специально обученных людей, и весь контроль над базой (включая ее структуру) остается на стороне приложения, а не субд.

золотого решения нет. каждый выбирает то, что ему больше подходит.

Все хорошо работает, пока бизнес не меняет логику, меняться запрос и получается много переделывать.
а переписывать и тестировать процедуры в субд проще? тем более, скорее всего, с изменением процедуры придется переписывать код все равно.
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Просто для информации, хранимые проценуры не используются вообще нигде, кроме, наверное, хардкорного энтерпрайза.
Тем более непонятно, как процедуры решают проблему переделывания кода.

Если отвечтаь на вопрос буквально, то

1. Для большинства простых операций с БД запросы вообще не пишутся, пишутся обращения к ORM. Например в вместо
$stmt = $pdo->prepare("SELECT * FROM users WHERE id=?");
$stmt->execute([$id]);
$user = $stmt->fetch();

Пишется

$user = $em->getRepository(User::class)->find($id);


2. Сложные запросы с фильтрами лежат в специальных классах, которые называются репозиториями.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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