Использование orWhere в нескольких местах, где построитель запросов Laravel - PullRequest
0 голосов
/ 18 февраля 2020

Я хочу выбрать из пэдов базы данных 4 условия, при 1 условии необходимо использовать «или». Я написал этот конструктор запросов, он работает. Но я хочу знать, могу ли я использовать более короткий запрос. Например, используйте 3 условия в скобках «где» и 1 в скобках «или». Это мой запрос:

$pads = DB::table('pads')
    ->join('languages', 'pads.language_id', '=', 'languages.id')
    ->select('pads.id', 'pads.title', 'pads.status', 'pads.people', 'pads.created_at', 'languages.name as language')
    ->where([
        ['pads.user_id', Auth::user()->id],
        ['pads.title', 'LIKE', "%{$request->search}%"],
        ['pads.status', $request->status],
        ['pads.language_id', $request->lg_id]
    ])
    ->orWhere([
        ['pads.user_id', Auth::user()->id],
        ['pads.people', 'LIKE', "%{$request->search}%"],
        ['pads.status', $request->status],
        ['pads.language_id', $request->lg_id]
    ])
    ->orderBy('created_at', 'desc')
    ->get();

1 Ответ

1 голос
/ 18 февраля 2020

Вы должны сгруппировать ваши условия в OR в orWhere() с функцией в качестве аргумента.

->where([
        ['pads.user_id', Auth::user()->id],
        ['pads.status', $request->status],
        ['pads.language_id', $request->lg_id]
    ])
->where(function ($query) use ($request) {
    $query->where('pads.title', 'LIKE', "%{$request->search}%")
          ->orWhere('pads.people', 'LIKE', "%{$request->search}%");
})

Это выдаст запрос, подобный

WHERE pads.user_id = ?
  AND pads.status = ? 
  AND pads.language_id = ?
  AND (
       pads.title LIKE ?
       OR pads.people LIKE ?
   )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...