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

Erro ao inserir episódios

Bom dia. Ao tentar inserir episódios, obtenho o seguinte erro: SQLSTATE[HY000]: General error: 1 no such table: main.temporada (SQL: insert into "episodios" ("numero", "temporada_id") values (1, 8))

Acedito que o erro esteja no segundo for, porque quando o deixo comentado, a série é inserida com sucesso e não retorna qualquer erro.

public function store(SeriesFormRequest $request)
    {
        $serie = Serie::create(['nome' => $request->nome]);
        $qtd_temporadas = $request->qtd_temporadas;

        for ($i = 1; $i <= $qtd_temporadas; $i++) {
            $temporada = $serie->temporadas()->create(['numero' => $i]);

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

Alguma sugestão? Obrigado.

PS: A formatação ficou estranha, mas é porque não consegui colar corretamente o código aqui. No VS Code está certa.

6 respostas

Olá Paulo,

A mensagem de erro está informando que não encontrou a tabela main.temporada, provavelmente as tabelas não foram criadas corretamente ou então tem algum erro em uma das migrations.

Compartilha por favor as migrations de episodios e de temporadas.

Segue o código das migrations:

Criar tabela Séries


use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CriarTabelaSeries extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('series', function (Blueprint $table) {
            $table->increments('id');
            $table->string('nome');
        });
    }

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

Criar tabela Temporadas


use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateTemporadasTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('temporadas', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->integer('numero');
            $table->integer('serie_id');

            $table->foreign('serie_id')
                ->references('id')
                ->on('series');
        });
    }

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

Criar tabela Episódios


use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

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('temporada_id');

            $table->foreign('temporada_id')
                ->references('id')
                ->on('temporada');
        });
    }

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

Em tempo, se eu acesso o /series, a série parece inserida corretamente na tabela. Porém, verifiquei o banco e acho que ele não salva os episódios.

solução!

Talvez seja só a foreign key da tabela episodios que ficou errada, onde tem ->on('temporada'); troca por ->on('temporadas');

Após isso apaga o banco e executa as migrations novamente, e então tenta inserir algumas séries.

Exatamente isso, Lucas. Eu realmente não havia percebido. Muito obrigado pelo auxílio.

Sem problemas Paulo, bom saber que deu certo!