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

Laravel acusa erro na contagem de episódios

Recebi essa mensagem de erro quando usei a contagem de erro, ou quando cadastro uma série colocando os episódios, (curiosamente adicionando uma série colocando nome e número de temporadas o programa roda normal) SQLSTATE[HY000]: General error: 1 no such column: episodios.temporadas_id (SQL: select * from "episodios" where "episodios"."temporadas_id" = 1 and "episodios"."temporadas_id" is not null) Como está meu código da Tabela Episódios:

class CreateEpisodiosTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('episodios', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->integer('numero');
            $table->integer('temporadas_id');
            $table->foreign('temporadas_id')->references('id')->on('temporadas');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('episodios');
    }
}

na SeriesController o método store está dessa maneira:

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++) {
                $episodios = $temporada->episodios()->create(['numero' => $j]);
            }
        }

       $request->session()->flash('mensagem', "Série {$serie->id} e suas temporadas foram criada com sucesso {$serie->nome}");

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

Toda ajuda é bem vinda, obrigado.

4 respostas

Bom dia Pedro, tudo bem?

Referente a "curiosamente adicionando uma série colocando nome e número de temporadas o programa roda normal", isso ocorre pois o erro está justamente na model/tabela de episódios, logo, tudo que não interagir com isso não irá resultar no erro que você está enfrentando.

Tenho o projeto do curso completo (inclusive estou fazendo outro bem parecido com esse) e a única diferença existente na migration de episódios é que o campo "temporada_id" não possui a letra "s" antes do underline (tempora_id). Logo, não vejo como isso estaria causando esse erro. Teria como você mandar os models de temporadas e episódios por gentileza?

Fico no aguardo.

Na mão: Model de Temporada:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;

class Temporadas extends Model
{
    use HasFactory;

    protected $fillable = ['numero'];
    public $timestamps = false;

    public function episodios(): HasMany
    {
        return$this->hasMany(Episodio::class);
    }

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

A model de Episódios:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Episodio extends Model
{
    use HasFactory;

    protected $fillable = ['numero'];
    public $timestamps = false;

    public function temporada()
    {
        $this->belongsTo(Temporadas::class);
    }
}
solução!

Opa, perceba que na Model de Episodios, o método temporada() não possui um return antes de "$this->belongsTo(Temporadas::class);", talvez isso resolva o seu problema!

Só pra retornar e agradecer Diésnei realmente o return foi importante na Model de Episódios, adicionei um "s" em ($table->integer('temporadas_id');), excluí o arquivo sqlite, e refiz a migração, ao rodar o php artisan serve, e fazer os testes com outras séries, funcionou normalmente, então, mais uma vez, obrigado.