2 условие в 1, где пункт в Laravel Builder - PullRequest
4 голосов
/ 21 июня 2019

Я хочу преобразовать свой запрос в формат Laravel Builder:

Это мой рабочий запрос:

SELECT * FROM tickets
WHERE tic_status_id = 65
AND (tic_escalation_date1 IS NULL OR tic_escalation_date1 < DATE('2019-06-22 13:00:00'))
AND (tic_escalation_date2 IS NULL OR tic_escalation_date2 < DATE('2019-06-22 13:00:00'))
AND (tic_escalation_date3 IS NULL OR tic_escalation_date3 < DATE('2019-06-22 13:00:00'))

Я пытаюсь использовать whereNull и orWhere, но это не работает.

Ответы [ 3 ]

4 голосов
/ 21 июня 2019

Вы можете использовать Группировка параметров , чтобы ограничить или где.

Передача Замыкания в метод where инструктирует построителя запросов начинать группу ограничений.Closure получит экземпляр построителя запросов, который вы можете использовать для установки ограничений, которые должны содержаться в группе скобок.

Затем внутри ограничения вы можете использовать whereNull () для добавления в запрос предложения "where null" и илиWhereDate () для добавления в запрос оператора "или где дата".Обратите внимание, что метод whereDate извлекает часть даты из выражения datetime .

DB::table('tickets')
            ->where('tic_status_id', '=', 65)
            ->where(function ($query) {
                $query->whereNull('tic_escalation_date1')
                      ->orWhereDate('tic_escalation_date1', '<', '2019-06-22 13:00:00');
            })
            ->where(function ($query) {
                $query->whereNull('tic_escalation_date2')
                      ->orWhereDate('tic_escalation_date2', '<', '2019-06-22 13:00:00');
            })
            ->where(function ($query) {
                $query->whereNull('tic_escalation_date3')
                      ->orWhereDate('tic_escalation_date3', '<', '2019-06-22 13:00:00');
            })
            ->get();
1 голос
/ 21 июня 2019

Вы можете попробовать следующий код:

    $tickets = DB::table('tickets');
    $tickets->where('tic_status_id', 65);
    $tickets->where(function($query){
        $query->whereNull('tic_escalation_date1');
        $query->orWhereDate('tic_escalation_date1', '<', DATE('2019-06-22 13:00:00'));
    });
    $tickets->where(function($query){
        $query->whereNull('tic_escalation_date2');
        $query->orWhereDate('tic_escalation_date2', '<', DATE('2019-06-22 13:00:00'));
    });
    $tickets->where(function($query){
        $query->whereNull('tic_escalation_date3');
        $query->orWhereDate('tic_escalation_date3', '<', DATE('2019-06-22 13:00:00'));
    });
    $ticket_data = $tickets->get();

Пожалуйста, обратитесь laravel для получения дополнительной информации. Вы можете использовать «orWhere» вместо «orWhereDate», если у вас есть столбец, отличный от типа «DateTime».

0 голосов
/ 21 июня 2019

Можете ли вы попробовать это

Метод первый

$query = DB::table( 'tickets')
            ->where( 'tic_status_id' ,'=',65)
            ->whereNull( 'tic_escalation_date1')
            ->orWhere( 'tic_escalation_date1', '<', "DATE('2019-06-22 13:00:00')")
            ->whereNull( 'tic_escalation_date2')
            ->orWhere( 'tic_escalation_date2', '<', "DATE('2019-06-22 13:00:00')")
            ->whereNull( 'tic_escalation_date3')
            ->orWhere( 'tic_escalation_date3', '<', "DATE('2019-06-22 13:00:00')");

Метод второй I am Not Sure About the this query will Work Fine

$query = DB::table( 'tickets')
            ->where( 'tic_status_id' ,'=',65)
            ->whereNull( 'tic_escalation_date1')
            ->orWhereDate( 'tic_escalation_date1', '<', "('2019-06-22 13:00:00')")
            ->whereNull( 'tic_escalation_date2')
            ->orWhereDate( 'tic_escalation_date2', '<', "DATE('2019-06-22 13:00:00')")
            ->whereNull( 'tic_escalation_date3')
            ->orWhereDate( 'tic_escalation_date3', '<', "DATE('2019-06-22 13:00:00')");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...