Как я могу сделать sql quere с псевдонимом в красноречивом laravel? - PullRequest
0 голосов
/ 25 февраля 2019

Я провожу весь день, чтобы попытаться сделать запрос sql красноречивым.Я знаю, что могу использовать raw, если мне нужно, но мне любопытно, есть ли способ сделать это?

мой raw sql:

SELECT *
FROM (
    SELECT 1 as own, id, up_date , top_list_end_date FROM advertisements WHERE top_list_end_date > now()
    UNION ALL
    SELECT 2 as own, id, up_date, top_list_end_date FROM advertisements  WHERE top_list_end_date IS NULL
) a
ORDER BY own, up_date desc

В laravel я пытаюсь это:

$groupA = $adv->where('top_list_end_date', '>', Carbon::now());
$groupA->select('*')
        ->selectSub(function ($query) {
            $query->selectRaw('1');
        }, 'own');

$groupB = $restAdv->whereNull('top_list_end_date');
$groupB->select('*')
        ->selectSub(function ($query) {
            $query->selectRaw('2');
        }, 'own');

$result = $groupA->unionAll($groupB);

$result->orderBy('own', 'desc')->orderBy('up_date', 'desc')->get();

есть ли способ создать такой же выбор в eloquent?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Красноречивый способ будет выглядеть примерно так:

$first = DB::table('advertisements')
            ->select(DB::raw('"1" AS own'), 'id', 'up_date', 'top_list_end_date')
            ->whereRaw('top_list_end_date > NOW()')

$advertisements = DB::table('advertisements')
            ->select(DB::raw('"2" AS own'), 'id', 'up_date', 'top_list_end_date')
            ->whereNull('top_list_end_date')
            ->unionAll($first)
            ->orderBy('own', 'DESC')
            ->orderBy('up_date', 'DESC')
            ->get();

Для справки см. здесь

Laravel unionAll имеет такую ​​же подпись, как и union.

Надеюсь, это поможет

0 голосов
/ 25 февраля 2019

, если вы хотите использовать SQL-запрос в laravel.Вы можете использовать построитель запросов, например

DB::raw();

или

DB::select();

, и если вы хотите использовать SQL-запрос с псевдонимом, просто напишите так:

$users = DB::table('your_table_name AS t')
       ->select('t.id AS uid')
       ->get();

Надеюсь, что этот ответ поможет вам.

Удачи:)

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