2 votes

count() renvoie des résultats différents de ceux de get()

J'ai un problème avec

$query = $game->releases()->select(['created_at'])->unionAll(
    $game->seasons()->select(['created_at'])
);

foreach ($query->get() as $result) {
    echo $result->created_at.PHP_EOL;
}
dd($query->count('created_at'));

Je peux itérer sur les résultats et voir qu'il y a 3 enregistrements, mais lorsque je fais le compte agrégé, je vois qu'il n'y en a que 2, alors que j'ai 3 valeurs uniques.

2018-03-23 03:20:07
2018-03-24 03:20:07
2018-03-25 03:20:07
count: 2

Pourquoi est-ce que je vois des résultats différents dans mon compte alors que mes valeurs sont toujours uniques ?

0voto

Webnet Points 12671

J'ai réussi à trouver une solution. Le problème vient de ma syntaxe, dans la mesure où l'élément count() se produit sur la première partie de l'union, PAS sur les résultats combinés. Pour que tous les résultats soient pris en compte, j'ai dû adopter cette approche :

$unionQuery = $game->releases()->select(['created_at'])->unionAll(
    $game->seasons()->select(['created_at'])
);

$records = DB::table(DB::raw("(".$unionQuery->toSql().") AS s"))
    ->selectRaw('COUNT(*) as updateCount')
    ->mergeBindings($unionQuery->getBaseQuery())
    ->first()->updateCount;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X