Eloquent groupBy проблема и выбор столбцов из нескольких таблиц - PullRequest
0 голосов
/ 18 октября 2019

Я хочу найти самые последние выигранные бизнесы ( estado = 'Ganado' ) от каждого клиента с текущей даты до введенного периода.

Кроме того, клиент должен иметьпредприятие, заработанное до указанного периода.

У меня есть запрос mySql, который отлично работает, но запрос Eloquent - нет.

MySql:

SELECT sortedTable.id, sortedTable.cliente_id, sortedTable.periodo, C.razon_social, U.name, U.apellido_p, U.apellido_m
FROM (SELECT * FROM negocios ORDER BY periodo_date DESC) as sortedTable INNER JOIN clientes C, users U //Order the table "negocios" by date to groupBy and keep the client with recently business won
WHERE C.id = sortedTable.cliente_id and sortedTable.user_id = U.id and sortedTable.estado = 'Ganado' and (sortedTable.periodo_date BETWEEN '2018-01-01 00:00:00' AND CURDATE()) //Search customers with a business won between the date entered and the current date
      and sortedTable.cliente_id in (SELECT cliente_id
                                     FROM negocios 
                                     WHERE estado = 'Ganado' and periodo_date < '2018-01-01 00:00:00') // The client has to have a business won before the period entered.
GROUP BY sortedTable.cliente_id

Eloquent:

$negociosGanados = \DB::table(\DB::raw("(SELECT * FROM negocios ORDER BY periodo_date DESC) as sortedTable"))
        ->join('clientes', 'sortedTable.cliente_id', '=', 'clientes.id')
        ->join('users', 'sortedTable.user_id', '=', 'users.id')
        ->where('sortedTable.estado', 'Ganado')
        ->whereBetween('sortedTable.periodo_date', array($periodo, $periodoActual))
        ->whereRaw("sortedTable.cliente_id in (SELECT cliente_id FROM negocios
                    WHERE estado = 'Ganado' AND periodo_date < '".$periodo."')")
        ->select('sortedTable.id',
            'sortedTable.cliente_id',
            'sortedTable.periodo_date'
        )
        ->groupBy('sortedTable.cliente_id')
        ->get();

Этот красноречивый запрос отлично работает , но когда я помещаю столбцы в таблицу выбора "клиенты" и "пользователи"это не так.

->select('sortedTable.id',
            'sortedTable.cliente_id',
            'sortedTable.periodo_date',
            'clientes.razon_social',
            'users.name'
        )

Ошибка:

SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1055 'crm.clientes.razon_social' отсутствует в GROUP BY ..

Я пытаюсь поместить новые столбцы в groupBy и исправил ошибку, но он не группируется по cliente.id и показывает несколько операций с одного и того же клиента.

->groupBy('sortedTable.cliente_id', 'clientes.razon_social', 'users.name')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...