Задать вопрос
@itcoder

В каком месте лучше разместить длинный sql в проекте?

Имееться:
- php MVC самописанный фреймворк для проекта.
- БД (PostgreeSql)
В проекте часто используються сложные выборки с LEFT JOIN и агрегирующими функциями, вложенными запросами и MATERIALIZED VIEW.
От QueryBuilder было решено откаказаться, при таких длинныз запросах его испозльзовать показалось сложным.
Используем PDO.
Посоветуйте в какое место лучше выносить SQL код, с последующим удобным к нему доступом, чтобы не писать его в контроллере или не раздувать модели функциями в которых будет написан SQL ?

Пример кода:
WITH events AS (SELECT "id","time","Seria__id","url","Event_Type__id" 
FROM "event" WHERE "time">? AND "Event_Status__id"=?)
                   SELECT "e"."id" AS "event.id",
                    min("e"."time") AS "event.time",
                    min("e"."Seria__id") AS "event.Seria__id",
                    min("e"."Event_Type__id") AS "event.Event_Type__id",
                    min("e"."url") AS "event.url",
                    array_to_string(array_agg("p"."name" ORDER BY "e_p"."owner" DESC),?) AS "partaker.name",
                    array_to_string(array_agg("p"."orig_url" ORDER BY "e_p"."owner" DESC),?) AS "partaker.orig_url",
                    array_to_string(array_agg("p"."small_url" ORDER BY "e_p"."owner" DESC),?) AS "partaker.small_url",
                    min("p_e"."price_rub") AS "product_event.price_rub",
                    min("p_e"."analytics") AS "product_event.analytics",
                    min("p_e"."id") AS "product_event.id",
                    min("o"."id") AS "order.id"
                FROM "events" "e"
                LEFT JOIN "event_partaker" "e_p"
                    ON "e"."id"="e_p"."Event__id"
                LEFT JOIN "partaker" "p"
                    ON "p"."id"="e_p"."Partaker__id"
                LEFT JOIN "product_event" "p_e"
                    ON "e"."id"="p_e"."Event__id"
                LEFT JOIN "order" "o"
                    ON ("o"."model_id"="p_e"."id" AND "model_name"=? AND "paid"=1 AND "User__id"=?)
                WHERE "p_e"."active"=1
                GROUP BY 1
                ORDER BY "event.time
  • Вопрос задан
  • 2563 просмотра
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 3
Как вариант вынести в отдельный файл в котором будут запросы и определять каждый запрос как обычную строковую константу
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
не раздувать модели функциями в которых будет написан SQL ?

Я правильно понимаю, что эта фраза подразумевает, что
а) раздувать надо какую-то другую сущность?
б) предполагается, что для SQL запросов существует более подходящая сущность, чем модель?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽