Как добавить и исключить условие where () в laravel построителе запросов - PullRequest
0 голосов
/ 31 января 2020

Как добавить и исключить условие where () в laravel построителе запросов, чтобы в одном случае оно было добавлено в другом, нет

$orders =  DB::table('orders')->select(
'orders.id as id',
'orders.created_at as created',
    'u.email as email',
    'ud.id as data_id',
    'ud.firstName as firstName',
    'ud.lastName as lastName',
    'ud.phone as phone',
    's.name as service',
    's.id as service_id',
    'pt.id as payment_type_id',
    'pt.name as payment_name')
    ->join('users as u', 'orders.user_id', '=', 'u.id')
    ->join('user_data as ud', 'u.id', '=' ,'ud.user_id')
    ->join('payment_types as pt', 'orders.payment_type_id', '=', 'pt.id')
    ->join('services as s', 'orders.service_id', '=', 's.id')
    ->where('u.id', $user->id)->orderBy($sortBy, $type)->get();

Я хочу сделать это

$order = DB::table()....
if(true){
  $order->where('id', '=', 1);
}
$order->orderBy('fieldname', 'asc')->get();

Но приведенный выше пример не дает результатов

1 Ответ

1 голос
/ 31 января 2020

Для условных предложений вы можете использовать when().

$order = DB::table()
       ->yourQuery(...)
       ->when($var, function ($query, $var) {      // <----
           return $query->where('id', '=', 1);     // <----
       }                                           // <----
       ->orderBy('fieldname', 'asc')
       ->get();

Подробнее об этом можно прочитать в документах :

Условные запросы

Иногда вы можете захотеть, чтобы предложения применялись к запросу только тогда, когда что-то еще является истинным. Например, вы можете захотеть применить оператор where только в том случае, если во входящем запросе присутствует заданное входное значение. Вы можете выполнить sh, используя метод when:

$role = $request->input('role');

$users = DB::table('users')
            ->when($role, function ($query, $role) {
                return $query->where('role_id', $role);
            })
            ->get();

Метод when выполняет указанное Закрытие, только если первый параметр true. Если первый параметр false, замыкание не будет выполнено.

...

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