Laravel запрос, где и где - PullRequest
2 голосов
/ 17 июня 2020

Я пытаюсь выполнить два запроса SQL в один массив laravel.

Это мои SQL

SELECT * FROM `transactions` WHERE `plan` LIKE '1050' ORDER BY `updated_at` DESC
SELECT * FROM `transactions` WHERE `user` LIKE '1050' ORDER BY `updated_at` DESC

Я хочу, чтобы все транзакции иметь "план" == "1050" И все транзакции, у которых есть "пользователь" == "1050" в одной переменной.

У меня не работает:

$ct=transactions::where('user',$user->id)
    ->orWhere('plan', $user->id)
    ->orderby('created_at',"asc")->get();

1 Ответ

1 голос
/ 17 июня 2020

Контекстная агности c способ объединения результатов двух совместимых с объединением запросов (таких как ваш) будет выглядеть так:

$result = transactions::where('plan', 'LIKE', $user->id)->orderBy('updated_at', 'DESC')
                 ->union(
                      transactions::where('user', 'LIKE', $user->id)
                         ->orderBy('updated_at', 'DESC')
                 )
                 ->get();

Это, конечно, означает, что результаты упорядочено по плану, затем по пользователю. Вы можете отсортировать их по updated_at глобально, используя приведенную ниже функцию для результата:

$result = $result->sortBy('updated_at', 'DESC');

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

Вышеупомянутый запрос должен быть функционально эквивалентен:

$result = transactions::orWhere('plan', 'LIKE', $user->id)
                        ->orWhere('user', 'LIKE', $user->id)
                        ->orderBy('updated_at', 'DESC')
                        ->get();

Результат будут те же, но в другом порядке, чем объединение.

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