我在运行时播种类别表:
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();
});
答案 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生成请求。