Если предположить, что в таблице не будет строки, если у игрока нет выигрыша или проигрыша, тогда ваш запрос не даст никаких результатов.
Один из вариантов (при условии, что у вас есть таблица players
) - запросить таблицу players
и затем присоединиться к pickup_results
:
.
$captains = DB::table('players')
->leftJoin('pickup_results', 'players.id', 'pickup_results.playerID')
->select('users.id as user_id',
DB::raw("COUNT(CASE WHEN results.gameResult = 'Win' THEN 1 END) AS wins"),
DB::raw("COUNT(CASE WHEN results.gameResult = 'Lose' THEN 1 END) AS loss"))
->where('players.id', $playerID)
->where('pickup_results.pickOrder', 0)
->groupBy('players.id')
->orderBy('wins', 'DESC')
->get();
В качестве альтернативы, поскольку вы используете get()
с запросом, коллекция будет возвращена независимо от результатов, поэтому вместо нее можно использовать метод whenEmpty () :
$captains = DB::table('pickup_results')
->select('playerID',
DB::raw("COUNT(CASE WHEN gameResult = 'Win' THEN 1 END) AS wins"),
DB::raw("COUNT(CASE WHEN gameResult = 'Loss' THEN 1 END) AS loss"))
->where('pickOrder', 0)
->where('playerID', $playerID)
->groupBy('playerID')
->orderBy('wins', 'DESC')
->get()
->whenEmpty(function ($items) use ($playerID) {
return $items->push((object)[
'playerID' => $playerID,
'wins' => 0,
'loss' => 0,
]);
});