Laravel где и или где функция - PullRequest
1 голос
/ 08 марта 2019

Я пытаюсь подсчитать, сколько билетов наши операторы закрыли за неделю (и за день). У меня есть эти 2 запроса

    $closedWeek = Ticket::join('activity_log', 'activity_log.rel_id', '=', 'ticket.id')
                ->where([
                    ['activity_log.created_at',  '>', $fri],
                    ['activity_log.user_id', '=', $id],
                    ['activity_log.event_name', '=', 'ticket_closed'],
                    ['number', 'like', 'SD%']
                ])->count();

    $closedWeek2 = Ticket::join('activity_log', 'activity_log.rel_id', '=', 'ticket.id')
                ->where([
                    ['activity_log.created_at',  '>', $fri],
                    ['activity_log.user_id', '=', $id],
                    ['number', 'like', 'SD%'],
                    ['activity_log.event_name', '=', 'ticket_department_updated']
                ])
                ->where(function($query) {
                    $query->where('activity_log.new_value', '=', 'closed Uninvoiced')
                        ->orWhere('activity_log.new_value', '=', 'To Invoice')
                        ->orWhere('activity_log.new_value', '=', 'closed Other')
                        ->orWhere('activity_log.new_value', '=', 'closed Invoiced');
                })->count();
    $closedWeek = $closedWeek + $closedWeek2;

Они возвращают немного большие цифры, чем ожидалось, и я думаю, что некоторые из них дублируются. Как я могу поместить их в один запрос, используя where (function ($ query)) или мне нужно использовать вместо этого DB :: raw? Затем я могу посчитать уникальные идентификаторы

1 Ответ

0 голосов
/ 08 марта 2019

Вы можете использовать GroupBy(); с идентификатором,

Пример:

$closedWeek = Ticket::join('activity_log', 'activity_log.rel_id', '=', 'ticket.id')
                ->where([
                    ['activity_log.created_at',  '>', $fri],
                    ['activity_log.user_id', '=', $id],
                    ['activity_log.event_name', '=', 'ticket_closed'],
                    ['number', 'like', 'SD%']
                ])
                ->groupBy('ticket.id')
                ->count();

    $closedWeek2 = Ticket::join('activity_log', 'activity_log.rel_id', '=', 'ticket.id')
                ->where([
                    ['activity_log.created_at',  '>', $fri],
                    ['activity_log.user_id', '=', $id],
                    ['number', 'like', 'SD%'],
                    ['activity_log.event_name', '=', 'ticket_department_updated']
                ])
                ->whereIn('activity_log.new_value', 
                    [   'closed Uninvoiced', 
                        'To Invoice',
                        'closed Other',
                        'closed Invoiced',
                ])
                ->groupBy('ticket.id')
                ->count();
$closedWeek = $closedWeek + $closedWeek2;

OBS:

Вам не нужно '=', на равных участках, пример , where('colun', '=', 'abc'); вы можете изменить на where('colun', 'abc');

Пожалуйста, проверьте и убедитесь, что у вас есть ожидаемый результат.

Ссылки:

Как получить отличные значения для неключевых полей столбцов в Laravel?

...