Estou compartilhando por que não sei se, dessa forma, seria a maneira correta, mas executou super rápido aqui e eu gostaria de compartilhar, eu até achei mais simples do que a implementação feita pelo professor.
DB::beginTransaction();
try {
$episodes = $request->episodes;
$query = "season_id = $season->id AND id IN(";
for ($i = 0; $i < count($episodes); $i++) {
if (count($episodes) - $i == 1) {
$query .= "$episodes[$i]";
} else {
$query .= "$episodes[$i],";
}
}
$query .= ");";
DB::table('episodes')->whereRaw($query)->update(["watched" => true]);
} catch (\Exception $e) {
throw new \Exception($e->getMessage());
}
DB::commit();
return to_route('episodes.index', $season->id)->with('mensagem.sucesso', 'Episódio atualizado com sucesso!');
Começo com o BeginTransaction, e então já abro o try pegando os episódios da requisição e crio uma variavel chamada "query", e ja explico o por que dessa forma Dito isso, eu faço interação, eu posso receber 2 ou centenas de ID'S nessa requisição, e essa interação conta quantos tem, e adiciona a query o id dentro do IN (metodo do mysql), no final da iteração, eu adiciono o ); para fechar a query Em seguida, eu puxo o DB::table('episodes') para justamente puxar a tabela de episodios (você pode fazer isso puxando a propria classe Episodes, fica a seu critério), assim, eu uso o método "whereRaw", pesquisando um pouco e vendo como ele funciona, ele vai adicionar um WHERE na query, junto com o argumento passando nela, nesse caso, o "query", e por isso eu o escrevi daquele jeito.
em seguida, dou o update com watched recebendo true e realizo o commit, n sei se é a melhor maneira, estou aberto a sugestões