Mysql
 sql >> Database >  >> RDS >> Mysql

Laravel 5.3 conteggio distinto, usando eloquente invece di Query Builder

La query che stai facendo non è corretta per il caso d'uso, puoi vedere la differenza.

select count(*) as aggregate from game_results 
where (school_id is null and season_id = '1') 
group by user_id order by user_id asc;

restituirà due righe

aggregate
1,
2

Eloquente sceglie prima e ritorna che è 1.

select count(*) as aggregate from game_results 
where (school_id is null and season_id = '1') 
group by user_id order by user_id desc;

restituirà le righe come

agrregate
2,
1

Eloquent risulterà 2 in questo caso.

Quello che vuoi è il conteggio di (query) che sarà di nuovo 2.

Ottenerlo? quello che vuoi è DISTINCT

$usersWithAnswersCount = GameResult::where([
    'school_id' => null,
    'season_id' => $this->season->id 
])
->distinct('user_id')
->count();