Laravel 5 красноречивый, где с несколькими или в пунктах - PullRequest
0 голосов
/ 07 июня 2019

Я новичок в Laravel и пытаюсь получить результаты из таблицы с несколькими предложениями where и или.

Cases::select()
  ->where('accepting_id', '=', '1')
  ->where('status', '=', 'active')
  ->orWhere("status", '=', 'closed')
  ->orWhere("status", '=', 'canceled')
  ->orderBy('id', 'DESC')
  ->get();

Я получаю неверные данные, используя несколько orWhere

Ответы [ 3 ]

4 голосов
/ 07 июня 2019
$user = Cases::select(`cols`)
              ->where('accepting_id', '=', '1')
              ->whereIn('status',  ['active', 'closed', 'canceled'])
              ->orderBy('id', 'DESC')
              ->get();

dd($user);

Попробуйте это

3 голосов
/ 07 июня 2019

Вы должны добавить операторы status where к замыканию where:

Cases::select()
    ->where('accepting_id', '=', '1')
    ->where(function($query) {
        $query->where('status', '=', 'active')
            ->orWhere("status", '=', 'closed')
            ->orWhere("status", '=', 'canceled');
    })
    ->orderBy('id', 'DESC')
    ->get();
1 голос
/ 07 июня 2019

Вместо использования multy orWhere() используйте whereIn()

Cases::select(`cols`)
    ->where('accepting_id', '=', '1')
    ->whereIn('status',  ['active', 'closed', 'canceled'])
    ->orderBy('id', 'DESC')
    ->get();

Также, если вы хотите сгруппировать некоторые запросы

Cases::select(`cols`)
    ->where('accepting_id', '=', '1')
    ->where(function ($q) {
        $q->where(`condition1`)
            ->orWhere(`condition1`);
    })
    ->orderBy('id', 'DESC')
    ->get();
...