1
resposta

Assistindo episódios

Quando eu desmarcar todos os episódios assistidos de uma temporada, o $request->episodes vai retornar null

eu estou utilizando está forma de otimizar o código(Citado nesse tópico aqui):

        $watchedEpisodes = $request->episodes; // episodios marcados
        DB::transaction(function () use ($watchedEpisodes, $season) {
            if (is_null($watchedEpisodes)) { // se nao vier marcado nenhum episodio
                DB::table('episodes')->where('season_id', $season->id)->update(['watched' => false]);
            }else {
                DB::table('episodes')->where('season_id', $season->id) // episodios nao selecionados
                                    ->whereNotIn('id', $watchedEpisodes)->update(['watched' => false]);
                DB::table('episodes')->where('season_id', $season->id) // episodios selecionados
                                    ->whereIn('id', $watchedEpisodes)->update(['watched' => true]);
            }
        });

dessa forma eu valido se o $request->episodes for nulo é porque não há nenhum episódio assistido 'watched' => false

o código acima retorna no máximo 3 queries, existe outra forma de deixar esse código mais expressivo com a mesma quantidade de queries retornadas ?

1 resposta

Pensei na seguinte forma:

$watchedEpisodes = $request->episodes ?? [];
DB::transaction(function () use($season, $watchedEpisodes) {
    Episode::where('season_id', $season->id)->update(['watched' => false]);
    Episode::whereIn('id', $watchedEpisodes)->update(['watched' => true]);
});

O único problema é que executará 3 queries mesmo quando o $request->episodes for nulo