Вероятно, есть несколько способов сделать это.Вот одна идея, которая может сработать (примечание: еще не полностью протестированы, поэтому могут потребоваться некоторые настройки):
$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?