3
respostas

[Projeto] Problema no site para aparecer as temporadas e os episódios

Enviarei o código e tem o trecho do problema da Laravel:

<x-layout title="Temporadas de {!! $series->nome !!}">
    <ul class="list-group">
        @foreach ($seasons as $season) 
        <li class="list-group-item d-flex justify-content-between align-items-center">
            <a href="{{ route('episodes.index', $season->id) }}">
                Temporada {{ $season->number }}
            </a>
    
            <span class="badge bg-secondary">
                {{ $season->episodes->count() }}
            </span>
        </li>
        @endforeach
    </ul>
</x-layout>


<x-layout title="Episódios">
    <form method="post">
        @csrf
        <ul class="list-group">
            @foreach ($episodes as $episode) 
            <li class="list-group-item d-flex justify-content-between align-items-center">
                    Episódio {{ $episode->number }}
                
                    <input type="checkbox" 
                           name="episodes[]" 
                           value="{{ $episode->id }}"
                           @if ($episode->watched) checked @endif />
            </li>
            @endforeach
        </ul>

        <button class="btn btn-primary mt-2 mb-2">Salvar</button>
    </form>
</x-layout>
3 respostas

Olá, Carlos! Como vai?

Aparentemente você está tentando exibir temporadas e episódios de uma série usando o Laravel. Vou tentar ajudar com algumas dicas para resolver o problema.

  1. Verifique as Rotas: Certifique-se de que as rotas para exibir as temporadas e episódios estão corretamente configuradas no seu arquivo de rotas (web.php). Por exemplo:

    Route::get('/series/{id}/seasons', [SeasonController::class, 'index'])->name('seasons.index');
    Route::get('/seasons/{id}/episodes', [EpisodeController::class, 'index'])->name('episodes.index');
    
  2. Controladores: Verifique se os controladores estão retornando os dados corretamente. No controlador responsável por exibir as temporadas, você deve buscar a série e suas temporadas. Exemplo:

    public function index($seriesId)
    {
        $series = Series::find($seriesId);
        $seasons = $series->seasons; // Certifique-se de que há um relacionamento definido no modelo Series
        return view('seasons.index', compact('series', 'seasons'));
    }
    
  3. Relacionamentos no Eloquent: Certifique-se de que os modelos Series, Season e Episode têm os relacionamentos corretos definidos. Por exemplo:

    class Series extends Model
    {
        public function seasons()
        {
            return $this->hasMany(Season::class);
        }
    }
    
    class Season extends Model
    {
        public function episodes()
        {
            return $this->hasMany(Episode::class);
        }
    }
    
  4. Verifique a Passagem de Dados: No seu Blade, você está usando variáveis como $series, $seasons e $episodes. Certifique-se de que essas variáveis estão sendo passadas corretamente para a view.

Espero que essas dicas ajudem a identificar e resolver o problema no seu projeto. Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Eu fiz igual do Vinicius desde ontem e não funcionou

Oi, Carlos! Perdão pela demora em responder!

O problema pode estar no carregamento dos relacionamentos. No Laravel, quando você usa {{ $season->episodes->count() }}, o relacionamento episodes precisa estar disponível na consulta. Caso contrário, pode não exibir nada ou gerar erros.

Resolva fazendo o seguinte no seu controller para carregar os episódios junto com as temporadas:


public function index($seriesId)
{
    $series = Series::findOrFail($seriesId);
    $seasons = $series->seasons()->with('episodes')->get();

    return view('seasons.index', compact('series', 'seasons'));
}

No caso dos episódios, também garanta que no controller você traga o relacionamento correto:


public function index($seasonId)
{
    $season = Season::with('episodes')->findOrFail($seasonId);
    $episodes = $season->episodes;

    return view('episodes.index', compact('episodes'));
}

Além disso, confira se o relacionamento entre os modelos está definido:


class Series extends Model
{
    public function seasons()
    {
        return $this->hasMany(Season::class);
    }
}

class Season extends Model
{
    public function episodes()
    {
        return $this->hasMany(Episode::class);
    }
}

Assim, o Blade que você já montou deve funcionar normalmente, exibindo as temporadas e episódios com a contagem correta.

Fico à disposição.