@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
  • Вопрос задан
  • 2558 просмотров
Пригласить эксперта
Ответы на вопрос 3
Как вариант вынести в отдельный файл в котором будут запросы и определять каждый запрос как обычную строковую константу
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
не раздувать модели функциями в которых будет написан SQL ?

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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽