¿Cómo hacer варьируется, выбор consultas подставляет Laravel?

estoy usando laravel танго 6,0 лет este código que funciona а-ля perfección

$data = DB::table('incidencias')
   ->join('clientes_incid', 'clientes_incid.rif', '=', 'incidencias.rif')
   ->select(DB::raw('count(*) as silver, cat_cliente'))->where('cat_cliente', '=','Silver')
   ->groupBy('cat_cliente')
   ->get();
    return view('Incidencias.index', compact('data'));

Quisiera hacer otro выбор, он intentado esto pero я da ошибка:

$data = DB::table('incidencias')
   ->join('clientes_incid', 'clientes_incid.rif', '=', 'incidencias.rif')
   ->select(DB::raw('count(*) as silver, cat_cliente'))->where('cat_cliente', '=','Silver')
   ->select(DB::raw('count(*) as gold, cat_cliente'))->where('cat_cliente', '=','Gold')
   ->groupBy('cat_cliente')
   ->get();
    return view('Incidencias.index', compact('data'));

Gracias de antemano!!

1
задан 20.12.2019, 16:05
1 ответ

Я считаю, что то, что ты ищешь, ты можешь решать с одним CASE WHEN таким образом:

$data = DB::table('incidencias')
           ->select('cat_client')
           ->selectRaw("COUNT(CASE WHEN cat_client = 'silver' THEN 1 ELSE NULL END) AS Silver")
           ->selectRaw("COUNT(CASE WHEN cat_cliente = 'gold' THEN 1 ELSE NULL END) AS Gold")
           ->join('clientes_incid', 'clientes_incid.rif', '=', 'incidencias.rif')
           ->groupBy('cat_cliente')
           ->get();

Где:

  • Мы Делаем один COUNT, когда cat_client будет равен silver, и даем ему прозвище Silver
  • Repetimos предыдущий шаг, но сейчас для случая gold
  • Мы Производим один select по отдельности чтобы выбирать в колонну cat_client, которая является той, которую ты занимаешь, чтобы делать твое группирование
  • , Заменяет использование DB::raw на метод selectRaw
  • , Так что, применив использование CASE WHEN, ты идешь в ponder устанавливать многообразные условия, и когда каждая будет выполнена, тебе произвела новая колонна с желанной стоимостью

Ссылок

2
ответ дан 21.12.2019, 12:12