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

Erro ao inserir séries, temporadas e episódios (Call to a member function create() on null)

Olá pessoal. Ao executar a função store() do SeriesController, recebo um erro de "call to a member function create() on null". Abaixo, o código (que inclusive acabei copiando da aula para ver se continuava com erro), e a mensagem de erro propriamente dita. Agradeço ajuda.

public function store(SeriesFormRequest $request)
    {

        $serie = Serie::create(['nome' => $request->nome]);
        $qtdTemporadas = $request->qtd_temporadas;
        for ($i = 1; $i <= $qtdTemporadas; $i++) {

            $temporada = $serie->temporadas()->create(['numero' => $i]);

            for ($j = 1; $j <= $request->ep_por_temporada; $j++) {
                $temporada->episodios()->create(['numero' => $j]);
            }
        }

        $request->session()->flash(
            'mensagem', "Série {$serie->nome} e suas temporadas e episódios criados com sucesso. "
        );


        return redirect()->route('listar_series');
    }

Erro:

Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR)
Call to a member function create() on null
5 respostas

Olá Luis,

Compartilha por favor o conteúdo das classes Serie, Temporada e Episodio, isso é provavelmente um problema em um dos relacionamentos.

Oi Lucas. segue:

Série:


namespace App;

use Illuminate\Database\Eloquent\Model;

class Serie extends Model
{
    public $timestamps = false;
    protected $fillable = ['nome'];

    public function temporadas()
    {
        $this->hasMany(Temporada::class);
    }
}

Temporada:


namespace App;

use Illuminate\Database\Eloquent\Model;

class  Temporada extends Model
{
    protected $fillable = ['numero'];
    public $timestamps = false;
    public function episodios()
    {
        return $this->hasMany(Episodio::class);
    }

    public function serie()
    {
        return $this->belongsTo(Serie::class);
    }
}

Episódio:


namespace App;

use Illuminate\Database\Eloquent\Model;

class Episodio extends Model
{
    protected $fillable = ['numero'];
    public $timestamps = false;
    public function temporada()
    {
        return $this->belongsTo(Temporada::class);
    }
}
solução!

Acho que encontrei o problema, em Serie na função temporadas faltou o return

Corrigindo isso deve funcionar.

Muitissimo obrigado pela sua atenção, era isso mesmo. Um abraço

Sem problemas Luis, bom saber que deu certo!