Laravel SQLSTATE [HY000]:常规错误:1364字段“ id”没有默认值

时间:2019-06-26 06:30:02

标签: php mysql laravel

我现在正在使用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;的结果

enter image description here

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

经过大量研究和良好答案,我找到了此解决方案,该解决方案为我解决了此问题:

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

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

答案 2 :(得分:0)

您一直收到此错误,因为您可能已修改了迁移表。 您可以尝试几种选择

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