【问题标题】:Impossible to db:seed laravel [duplicate]db:seed laravel 不可能 [重复]
【发布时间】:2020-03-10 15:29:06
【问题描述】:

早上好,

我无法将数据从我的工厂发送到我的数据库。

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 中创建一个“路由”,所以我也没有完成 CRUD,我什至没有修改我的刀片,但我现在只想设置我的整个数据库。 但我想知道这是否不是问题所在。

这是我数据库中的示意图: https://imgur.com/a/8Txn7x2 (我还不能上传图片。)

(我在编程学校)

谢谢!

【问题讨论】:

  • 再看看你的错误。 Field 'genre_id' doesn't have a default value,而您只插入 isbntitlepublish_date 以及时间戳。要么使genre_id 为空,要么传入一个。
  • @aynber 谢谢,我试试,我也这么想,但是我不敢碰外键。

标签: php mysql database laravel laravel-7


【解决方案1】:

您已将 genre_id 列定义为必需的,或始终包含一个值。但是,您的插入查询不包括 genre_id 值。在这种情况下,MySQL 将回退到为该列配置的默认值,但您还没有定义。

默认值对于像genre_id 这样的外键样式列没有多大意义,除非您有特定原因指定在未明确提供时使用的默认 ID。

更好的选择是创建列nullable,或者能够使用NULL 值而不是现有ID。将迁移中的行修改为:

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

当外键列是nullable 时,它不会对NULL 值执行任何断言,只会执行非空值。

【讨论】:

    猜你喜欢
    • 2015-06-25
    • 2015-11-11
    • 2016-02-09
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 2015-10-20
    相关资源
    最近更新 更多