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!
Usted ha definido su genre_id
columna como se requiera, o que siempre contiene un valor. Su consulta de inserción, sin embargo, no está incluyendo un genre_id
valor. 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 NULL
valor 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 NULL
valor, sólo los valores no nulos.