【问题标题】:Laravel SQLSTATE[HY000]: General error: 1364 Field 'id' doesn't have a default valueLaravel SQLSTATE[HY000]:一般错误:1364 字段 'id' 没有默认值
【发布时间】:2019-06-26 06:30:02
【问题描述】:

我现在正在开发一个 Laravel 应用程序,但是当我现在运行 php artisan migrate 时,突然之间我总是得到错误:

SQLSTATE[HY000]: General error: 1364 Field 'id' doesn't have a default value (SQL: insert into `migrations` (`migration`, `batch`) values (2019_06_05_080701_create_departments_table, 22))

我不知道为什么会发生这种情况,因为以前从未发生过。当我尝试迁移特定迁移时,我得到了同样的错误,那么这里发生了什么?

迁移如下所示:

public function up()
{
    Schema::create('departments', function (Blueprint $table) {
        $table->increments('id');
        $table->unsignedInteger('company_id');
        $table->string('name');
        $table->string('p_number')->nullable();
        $table->string('address')->nullable();
        $table->string('zipcode')->nullable();
        $table->string('city')->nullable();
        $table->string('contact_name')->nullable();
        $table->string('contact_email')->nullable();
        $table->string('contact_phone')->nullable();

        $table->timestamps();
    });
}

SHOW COLUMNS FROM migrations;的结果

【问题讨论】:

  • 您自己创建了迁移表吗?
  • 请向我们展示该迁移的代码。
  • @MagnusEriksson 请检查我更新的问题 :-) 无论如何,它在每次迁移中......
  • @DrakulaPredator 不,这就是奇怪的部分......
  • 同意@DrakulaPredator。 @ST80 你能显示SHOW COLUMNS FROM migrations;的结果吗?

标签: php mysql laravel


【解决方案1】:

触发此查询应该适用于自动递增,这就是 id 的值没有自动递增的原因

ALTER TABLE migrations MODIFY id INTEGER NOT NULL AUTO_INCREMENT;

注意:如果有 id 为 0 则应将其更改为其他 唯一的id值,后面通过查询得到id的最大值并设置 自动递增到 +1

SET @new_index = (SELECT MAX(id) FROM migrations );
SET @sql = CONCAT('ALTER TABLE migrations AUTO_INCREMENT = ', @new_index);
PREPARE st FROM @sql;
EXECUTE st;

Reference.

【讨论】:

  • 我收到错误:1062 - ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '1' for key 'PRIMARY'
  • 您可以从here 获得有关此特定问题的帮助。但我确信您的问题与自动增量有关。
  • 你检查过 id 列是否有 0 个值吗?
  • 嗯,是的,第一个条目的 id = 0
  • @ST80 现在检查我的答案
【解决方案2】:

经过大量研究和良好的答案,我找到了这个解决方案,它为我解决了这个问题:

ALTER TABLE migrations CHANGE COLUMN `id` `id` INT(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT = 123456;

该解决方案基于this 对类似问题的回答 - 感谢@Dracula Predator 的良好提示。

【讨论】:

    【解决方案3】:

    您收到此错误可能是因为您修改了迁移表。 你可以尝试几个选项

    1. 运行 php artisan migrate:fresh 命令
    2. 删除所有表并重新运行所有迁移

    【讨论】:

    • 正如您在问题中看到的那样,在将某些内容插入迁移表(通常在这种情况下)不受迁移脚本影响的过程中会引发错误。所以你的解决方案没有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 2019-05-06
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多