1
resposta

Não consigo salvar as séries assistidas

Olá Professor, tudo bem?

Estou com dificuldades para salvar as séries assistidas, quando clico em salvar ele retorna o seguinte erro: SQLSTATE[HY000]: General error: 1364 Field 'serie_id' doesn't have a default value (SQL: insert into seasons () values ())

Eu escrevi o código todo em inglês mas segui os mesmos passos que o senhor.

Model:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use App\Models\Season;

class Episode extends Model
{

    protected $table = "episodes";
    protected $fillable = ['number']; 
    public $timestamps = false;

    public function season(){

        return $this->belongsTo(Season::class);
    }

}

Controller:

class EpisodesController extends Controller
{
    public function index(Season $serieId){

        return view('episodes.index',[
            'episode' => $serieId -> relEpisode,
            'season'  => $serieId -> id
        ]);
    }

    public function watch(Season $season, Request $request){


        $watchedEpisode = $request->episodes;

        $season -> relEpisode ->each(function(Episode $episode) 
        use ($watchedEpisode) {
            $episode -> watched = in_array($episode->id, $watchedEpisode);
        });

        $season -> push();
    }

}

Migration:

 */
    public function up()
    {
        Schema::table('episodes', function (Blueprint $table) {
            // O valor "->default" cria uma padrão para os dados já existentes 
            $table -> boolean('watched')->default(false);
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('episodes', function (Blueprint $table) {
            $table -> dropColumn('watched');
        });
    }
}
1 resposta

Olá Daniel.

O erro (Field 'serie_id' doesn't have a default value) diz que você precisa passar o campo serie_id no insert pois ele não tem um valor padrão na tabela. Na tabela você precisa definir um valor padrão para os campos que não serão declarados na instrução de insert, exemplo:

CREATE TABLE `series` (
    `id` INT(10) NOT NULL AUTO_INCREMENT,
    `nome` VARCHAR(100) NOT NULL,
    `tipo` CHAR(1) NOT NULL DEFAULT 1,
    PRIMARY KEY (`id`)
)

Neste caso o campo tipo terá o valor default 1** caso não seja passado nenhum valor no insert. Já o campo **nome não tem valor default, ou seja, ele é obrigatório na instrução de insert pois o not null define que o registro precisa deste campo preenchido.

Sugestão:

  1. definir um valor padrão para o campo serie_id na sua tabela ...serie_id INT(10) DEFAULT 0...

    ou

  2. passar este campo e valor na instrução de insert: insert into seasons (serie_id, ...outros campos...) values (10, ...outros valores...);

Abraço