Laravel查询构建器将id设置为0不起作用

时间:2017-07-24 10:51:44

标签: laravel eloquent laravel-eloquent

我在运行时播种类别表:

    DB::table('cats')->insert([
        'id' => 0,
        'parent_cat_id' => null,
        'name' => 'Uncategorized'
    ]);

但是插入行的id将为1,如果我尝试在db上手动更新id它是可能的。

除零之外的任何内容均适用于查询构建器(例如'id'=>5

修改:  目前这个hack正在运行,如果insert()可以将ID更改为update()0会出现什么问题?

    DB::table('cats')->insert([
        'id' => 100,
        'parent_cat_id' => null,
        'name' => 'Uncategorized'
    ]);
    DB::table('cats')->where('id',100)->update(['id' => 0]);

我的迁移架构:

    Schema::create('cats', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->unsignedInteger('parent_cat_id')->nullable();
    });

3 个答案:

答案 0 :(得分:1)

您似乎已将id列定义为:

$table->increments('id');

那是UNSIGNED INTEGER等价的。

https://laravel.com/docs/5.4/migrations

<强>更新

要创建自动递增而非无符号字段,请执行以下操作:

$table->integer('id');
$table->primary('id');
  

Eloquent假设主键是递增的整数值,这意味着默认情况下主键将自动转换为int。

https://laravel.com/docs/5.3/eloquent#eloquent-model-conventions

答案 1 :(得分:0)

更改您的迁移文件。然后使用命令 - php artisan migrate

{{1}}

答案 2 :(得分:0)

我解决了这个问题

public function up()
{
   Schema::create('cats', function (Blueprint $table) {
       DB::statement('SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";');
       //run other migrations 
   }
}

sql_mode MySQL变量告诉MySQL是否应将0 INSERT解释为真0,而不是PRIMARY KEY生成请求。