Eu venho quebrando a cabeça há algum tempo com a seguinte situação. Eu tenho uma situação onde um admin quer remover um artista da base de dados do site, e com essa remoção ele deve excluir ANTES também:
- Álbuns + capas dos álbuns do artista
- Faixas destes álbuns
- Singles destes álbuns
- Filmes + capas dos filmes que esse artista participou
- Desafetos do artista
Além disso, preciso mudar o campo artistaID
nos vídeos desse artista excluído para um genérico cujo id é 182 e tornar os campos albumID
e trackNumero
em NULL
, já que os álbuns relacionados à esses vídeos não existem mais.
Aí, depois de tudo isso é que eu finalmente excluo a foto de perfil do artista, pra enfim excluir o artista.
A estrutura das models é a seguinte:
Eu consigo remover os álbuns (mas não as capas), as faixas, os singles e aí entro num erro 404. Tentei alguns códigos, mas nenhum chega de fato ao final da ação, que é remover o artista.
Eis o controller:
public function removerArtista(Request $request){
$artista = Artistas::findOrFail($request->artistaID);
/* Faz a busca por todos os álbuns do artista */
$albuns = $artista->albuns;
/* Remove as capas de álbuns antes de prosseguir (NÃO FUNCIONA) */
foreach ($albuns as $album)
{
//$image_path = 'storage/albuns/' . $album->coverAlbum;
Storage::delete(Storage::path('albuns/'.$album->coverAlbum));
$album->faixas()->delete(); /* Remove todas as faixas para aqueles álbuns */
$album->singles()->delete(); /* Remove todos os singles daqueles álbuns */
$album->delete(); /* Remove o álbum */
}
/* DÁ ERRO 404 A PARTIR DAQUI /\ */
/* Faz a busca por todos os filmes do artista */
$filmes = $artista->filmes;
/* Remove as capas de filmes antes de prosseguir */
foreach ($filmes as $filme)
{
$filme->delete(); /* Remove o filme */
}
$artista->desafetos()->delete(); /* Remove todos os desafetos do artista */
$artista->grupos()->delete(); /* Remove todos os grupos do artista */
$videos = $artista->videos;
foreach($videos as $video){
$video = Videos::findOrFail($video);
$video->artistaID = 182;
$video->albumID = NULL;
$video->trackNumero = NULL;
$video->save();
}
unlink('storage/artistas/'.$artista->fotoPerfil);
return 'SUCESSO' //mensagem genérica para testes;
}