Как преобразовать SQL-запрос в построитель запросов? - PullRequest
0 голосов
/ 28 января 2019

controlens - это таблица в моей базе данных, и entite, state - поля этой таблицы

SELECT a.entite, a.etat,  COUNT(a.etat) as nombre_toperform, b.nombre_performed,c.nombre_incompatible
FROM `controlens` a

LEFT JOIN ( SELECT entite,COUNT(etat) as nombre_performed from `controlens` WHERE etat like 'PERFORMED' GROUP BY entite, etat) b on a.entite = b.entite

LEFT JOIN ( SELECT entite,COUNT(etat) as nombre_incompatible from `controlens` WHERE etat like 'INCOMPATIBLE' GROUP BY entite, etat) c on a.entite = c.entite

WHERE a.etat like '%TOPERFORM%' 
GROUP BY a.entite, a.etat, b.nombre_performed,c.nombre_incompatible

1 Ответ

0 голосов
/ 28 января 2019

Вероятно, есть несколько способов сделать это.Вот одна идея, которая может сработать (примечание: еще не полностью протестированы, поэтому могут потребоваться некоторые настройки):

$toPerform = '%TOPERFORM%';
$subQuery1 = 'SELECT entite,COUNT(etat) as nombre_performed from `controlens` WHERE etat like 'PERFORMED' GROUP BY entite, etat';
$subQuery2 = 'SELECT entite,COUNT(etat) as nombre_incompatible from `controlens` WHERE etat like 'INCOMPATIBLE' GROUP BY entite, etat';

DB::table('controlens as a')->select([
    'a.entite',
    'a.etat',
    DB::raw('COUNT(a.etat) AS nombre_toperform'),
    'b.nombre_performed',
    'c.nombre_incompatible'
])
->leftJoin(DB::raw("($subQuery1) as b"), 'a.entite', '=', 'b.entite')
->leftJoin(DB::raw("($subQuery2) as c"), 'a.entite', '=', 'c.entite')
->where('a.etat', $toPerform)
->groupBy('a.entite', 'a.etat', 'b.nombre_performed', 'c.nombre_incompatible');

В качестве альтернативы, вы можете попробовать этот пакет, чтобы посмотреть, помогает ли он причиной: eloquent-subquery-magic

Кроме того, вот несколько полезных статей, которые могут указать вам верное направление:

подзапрос с объединением в laravel

Laravel Fluent Query Builder Присоединиться к подзапросу

Как написать это (левое соединение, подзапрос) в Laravel 5.1?

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