Dei uma lida nas respostas dos amigos do forum e percebi que alguns não estavam tratando um possível erro de quando o usuário devolve um array vazio com os ids dos episodes assistidos! O que acabava estourando uma exception no momento da execução.
Segue aí como fiz para contornar isso e atualizar a lista mesmo quando recebemos um array vazio na requisição:
public function update(Request $request, Season $season)
{
$watchedEpisodes = implode(', ', $request->episodes ?? []);
if (empty($watchedEpisodes)) {
DB::transaction(function () use ($season) {
$season->episodes()->update(['watched' => 0]);
});
return redirect()->route('episodes.index', $season->id);
}
DB::transaction(function () use ($watchedEpisodes, $season) {
$season->episodes()->update(['watched' => DB::raw("case when id in ($watchedEpisodes) then 1 else 0 end")]);
});
return redirect()->route('episodes.index', $season->id);
}
Tentei adaptar um conceito de "fail-fast" na execução, mas não tenho certeza se isso se encaixa direito no contexto. XD