不可能 db:seed laravel
Impossible to db:seed laravel
早上好,
我无法将数据从我的工厂发送到我的数据库。
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))
我不知道在我的迁移中是否必须指定我的 foreign_keys 没有默认值...
这些是我的文件:
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()
];
});
我还没有在我的 web.php 中创建一个 'Route',所以我还没有完成 CRUD,我什至没有修改我的刀片,但我只是想设置我的目前整个数据库。
但我想知道是不是问题所在。
这是我的数据库中的示意图:
https://imgur.com/a/8Txn7x2
(我还不能上传图片。)
(我在编码学校)
谢谢!
您已将 genre_id
列定义为必需列,或始终包含一个值。但是,您的插入查询不包括 genre_id
值。在这种情况下,MySQL 将回退以查找为该列配置的默认值,但您尚未定义。
默认值对于像 genre_id
这样的外键样式列没有多大意义,除非您有特定原因指定在未明确提供时使用的默认 ID。
更好的选择是使列 nullable
,或者能够使用 NULL
值而不是现有 ID。将迁移中的行修改为:
$table->bigInteger('genre_id')->unsigned()->nullable();
当外键列为 nullable
时,它不会对 NULL
值执行任何断言,仅对非空值执行断言。
早上好,
我无法将数据从我的工厂发送到我的数据库。
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))
我不知道在我的迁移中是否必须指定我的 foreign_keys 没有默认值...
这些是我的文件:
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()
];
});
我还没有在我的 web.php 中创建一个 'Route',所以我还没有完成 CRUD,我什至没有修改我的刀片,但我只是想设置我的目前整个数据库。 但我想知道是不是问题所在。
这是我的数据库中的示意图: https://imgur.com/a/8Txn7x2 (我还不能上传图片。)
(我在编码学校)
谢谢!
您已将 genre_id
列定义为必需列,或始终包含一个值。但是,您的插入查询不包括 genre_id
值。在这种情况下,MySQL 将回退以查找为该列配置的默认值,但您尚未定义。
默认值对于像 genre_id
这样的外键样式列没有多大意义,除非您有特定原因指定在未明确提供时使用的默认 ID。
更好的选择是使列 nullable
,或者能够使用 NULL
值而不是现有 ID。将迁移中的行修改为:
$table->bigInteger('genre_id')->unsigned()->nullable();
当外键列为 nullable
时,它不会对 NULL
值执行任何断言,仅对非空值执行断言。