Imposible DB: laravel semilla

Thomas C .:

Buenos días,

No puedo enviar los datos de mi fábrica a mi base de datos.

SQLSTATE[HY000]: General error: 1364 Field 'genre_id' doesn't have a default value (SQL: insert into `books` (`isbn`, `title`, `publish_date`, `updated_at`, `created_at`) values (4243421897, Prof., 1992-09-08 00:57:41, 2020-03-10 15:02:36, 2020-03-10 15:02:36))

No sé si en mi migraciones tengo que especificar que mis FOREIGN_KEYS no tienen valores por defecto ...

Estos son mis archivos:

create_books_table.php

 public function up()
    {
        Schema::create('books', function (Blueprint $table) {
            $table->engine = 'InnoDB';

            $table->id('isbn');
            $table->string('title' , 100);
            $table->text('cover')->nullable();
            $table->date('publish_date');
            $table->bigInteger('genre_id')->unsigned();
            $table->bigInteger('author_id')->unsigned();
            $table->bigInteger('user_id')->unsigned();
            $table->timestamps();

            $table->foreign('genre_id')
                ->references('id')->on('Genres')
                ->onUpdate('cascade')
                ->onDelete('cascade');

            $table->foreign('author_id')
                ->references('id')->on('Authors')
                ->onUpdate('cascade')
                ->onDelete('cascade');

            $table->foreign('user_id')
                ->references('id')->on('Readers')
                ->onUpdate('cascade')
                ->onDelete('cascade');
        });
    }

BookFactory.php

$factory->define(Book::class, function (Faker $faker) {
    return [
        'isbn' => $faker->isbn10,
        'title' => $faker->title,
        'publish_date' => $faker->dateTime()
    ];
});

Todavía no he creado una 'ruta' en mi web.php por lo que no he hecho la ABM también, ni siquiera he modificado mis cuchillas, pero sólo quiero configurar toda mi base de datos por el momento. Pero me pregunto si ese no es el problema.

Aquí está un diagrama esquemático de mi base de datos: https://imgur.com/a/8Txn7x2 (. No estoy autorizado a subir imágenes aún)

(Estoy en la escuela de codificación)

¡Gracias!

Aquisgrán Roberts:

Usted ha definido su genre_idcolumna como se requiera, o que siempre contiene un valor. Su consulta de inserción, sin embargo, no está incluyendo un genre_idvalor. En este caso, MySQL caerá de nuevo para buscar un valor por defecto configurado para la columna, pero no se ha definido una.

Un valor por defecto no tiene mucho sentido para una columna de estilo como clave externa genre_id, a menos que tenga una razón específica para especificar un ID de defecto que se utilizará cuando no se proporciona explícitamente.

La mejor opción sería hacer la columna nullable, o en condiciones de utilizar un NULLvalor en lugar de un ID existente. Modificar la línea en su migración a:

$table->bigInteger('genre_id')->unsigned()->nullable();

Cuando una columna de clave externa es nullable, no va a realizar ninguna afirmación para el NULLvalor, sólo los valores no nulos.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=276107&siteId=1
Recomendado
Clasificación