Laravel: Как написать два запроса в одном запросе и получить результат из базы данных?

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

$query1 = $inbox->where('recipient', $user_id)
                ->where('trashed_in_recipient', 1)
                ->where('show_in_recipient', '!=', 1)
                ->orderBy('created_at', 'desc')
                ->paginate($paginate);

$query2 = $inbox->where('sender', $user_id)
                ->where('trashed_in_sender', 1)
                ->where('show_in_sender', '!=', 1)
                ->orderBy('created_at', 'desc')
                ->paginate($paginate);

Как можно написать два запроса в одном и получить в итоге результат?

Структура таблицы:

введите здесь описание изображения


person Andreas Hunter    schedule 15.01.2018    source источник
comment
нам нужен контекст относительно таблиц, на которые вы ссылаетесь.   -  person online Thomas    schedule 15.01.2018
comment
Вы можете увидеть структуру моей таблицы в обновленном вопросе! @Томас Мурс   -  person Andreas Hunter    schedule 15.01.2018
comment
Вы используете черту SoftDeletes?   -  person Rajender Joshi    schedule 15.01.2018
comment
Да, я использую, но не сейчас! Я воспользуюсь им, если мне нужно будет восстановить сообщения @Rajender Joshi   -  person Andreas Hunter    schedule 15.01.2018
comment
Если вы собираетесь использовать SoftDeletes, вам не нужны столбцы trashed_in_recipient и trashed_in_sender.   -  person Rajender Joshi    schedule 15.01.2018
comment
Хорошо, спасибо, я удалю эти столбцы, если буду использовать SoftDeletes @Rajender Joshi   -  person Andreas Hunter    schedule 15.01.2018


Ответы (1)


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

$query = $inbox->where(function($query) use ($user_id) {
    $query->where('recipient', $user_id);
    $query->where('trashed_in_recipient', 1);
    $query->where('show_in_recipient', '!=', 1);
})->orWhere(function($query) use ($user_id) {
    $query->where('sender', $user_id);
    $query->where('trashed_in_sender', 1);
    $query->where('show_in_sender', '!=', 1);
})->orderBy('created_at', 'desc')
  ->paginate($paginate);

Я надеюсь, это поможет вам

person SyncroIT    schedule 15.01.2018
comment
Спасибо @Syncro! И в последнем запросе я могу разбить на страницы два результата запроса? - person Andreas Hunter; 15.01.2018
comment
внутри функции обратного вызова с использованием var $user_id возникает ошибка: Undefined variable: user_id - person Andreas Hunter; 15.01.2018
comment
Измените его на function($query) (use $user_id) - person Rajender Joshi; 15.01.2018
comment
Используйте function($query) use ($user_id) вместо function($query), извините :) - person SyncroIT; 15.01.2018
comment
Работает @Синкро! В общем +1 вам ) - person Andreas Hunter; 15.01.2018