Как я могу переписать SQL необработанный запрос в Laravel Конструктор запросов - PullRequest
1 голос
/ 21 июня 2020

У меня есть запрос postgresql, который отлично работает

select "exhibitions_artworks".*, "curator_rating"."curator_id", "curator_rating"."selected",
       "curator_rating"."rating", "curator_rating"."submitted" from "exhibitions_artworks"
full outer join "curator_rating" on "curator_rating"."artwork_id" = "exhibitions_artworks"."id"
where "exhibitions_artworks"."exhibition_id" = 15
  and "exhibitions_artworks"."exhibition_id" is not null
  and "active" = true
  and "exhibitions_artworks"."status" = 0
  and "curator_rating"."curator_id" = 71 or "curator_rating"."curator_id" is null

Я использую laravel и хочу переписать его в Laravel Query Builder. Но Laravel ORM не поддерживает full outer join. Есть идеи?

1 Ответ

0 голосов
/ 21 июня 2020

На Laravel, если вы хотите записать SQL raw, вы можете использовать DB:raw.

Пример:

$results = DB::select( DB::raw("SELECT * FROM table WHERE column = '$variable'") );

DB::raw() используется для создания произвольные SQL команды, которые больше не анализируются построителем запросов.

(обновлено)

Используя следующий SQL в качестве примера:

SELECT * FROM t1 FULL OUTER JOIN t2 ON t1.id = t2.id;

Мы также можем использовать UNION для обработки того же результата:

SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.id
UNION ALL
SELECT * FROM t1 RIGHT JOIN t2 ON t1.id = t2.id

В структуре Laravel вы можете использовать метод unionAll:

$first = DB::table('users')
            ->whereNull('first_name');

$users = DB::table('users')
            ->whereNull('last_name')
            ->union($first)
            ->get();

Ссылка: https://laravel.com/docs/7.x/queries#unions

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...