Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Foreach dentro de Foreach para Tipo de Álbum e Álbuns

Não sei se ficou muito claro, mas o que eu tô uma dúvida complicada pra resolver é fazer um foreach dentro de um foreach.

Eu tenho uma tabela que contém uma listagem de álbuns, e para cada álbum é atribuído um ID que corresponde a tabela tipoalbum, indo de 1 a 7.

O que eu preciso é que durante o foreach, eu acesse o tipo de álbum primeiramente, que será o título, e em seguida os álbuns que se referem a esse tipo, algo como:

@foreach($tipoAlbuns as $tipo)
    <h1>{{$tipo->tipoAlbumNome}}</h1>
        @foreach($tipo->albuns (ou algo do tipo) as $album)
            {{$album->albumTitulo}}
        @endforeach
@endforeach

Minhas models estão, da seguinte forma: Album.php

public function albuns():BelongsTo{
        return $this->belongsTo(Artista::class, 'artistaID');
    }
    public function tipoAlbum():BelongsTo{
        return $this->belongsTo(TipoAlbum::class, 'tipoAlbum');
    }

TipoAlbum.php

public function tipoAlbum():HasMany{
        return $this->hasMany(Album::class, 'tipoAlbum');
    }
2 respostas
solução!

Oi

Parece que você está usando o Laravel, certo? Se sim, a estrutura de relacionamento entre modelos já está definida nas suas models Album e TipoAlbum. No entanto, o relacionamento entre essas duas tabelas parece ser de "um para muitos" (One-to-Many) no caso do TipoAlbum para o Album.

Se você deseja exibir todos os álbuns agrupados por tipo de álbum, você pode usar o método with para carregar os álbuns relacionados com cada tipo de álbum no seu controlador. Aqui está um exemplo:

Controller:

$tipoAlbuns = TipoAlbum::with('albuns')->get();
return view('sua_view', compact('tipoAlbuns'));

View:

@foreach($tipoAlbuns as $tipo)
    <h1>{{$tipo->tipoAlbumNome}}</h1>
    @foreach($tipo->albuns as $album)
        {{$album->albumTitulo}}
    @endforeach
@endforeach

Certifique-se de que os nomes dos métodos de relacionamento nas suas models (albuns em TipoAlbum.php e tipoAlbum em Album.php) correspondam aos nomes das relações definidas nos métodos de relacionamento. Essa convenção é importante no Laravel.

Verifica se os dados no banco de dados estão corretamente relacionados, ou seja, se os valores das colunas tipoAlbum nas tabelas Album correspondem aos IDs corretos na tabela TipoAlbum.

Se ainda houver problemas,veja as mensagens de erro ou logs para identificar possíveis problemas específicos.

Opa, finalmente tive tempo para testar aqui. Esqueci de mencionar que o projeto era em Laravel 10.

Após testar o código, consegui resolver fazendo a seguinte modificação no model de Tipo de Álbum.

Substitui...

public function tipoAlbum():HasMany{
        return $this->hasMany(Album::class, 'tipoAlbum');
    }

Por...

public function albuns():HasMany{
        return $this->hasMany(Album::class, 'tipoAlbum', 'tipoAlbumID');
    }

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software