当我运行时,我正在播种类别表:
DB::table('cats')->insert([
'id' => 0,
'parent_cat_id' => null,
'name' => 'Uncategorized'
]);但是插入的行的id将是1,如果我尝试手动更新db上的id,这是可能的。
在查询生成器(例如,'id'=>5)中,除零以外的任何东西都可以工作。
编辑:目前该黑客正在工作,如果update()可以将id更改为0,那么insert()有什么问题?
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();
});发布于 2017-07-24 10:56:35
您似乎使用以下方法定义了id列:
$table->increments('id');这是UNSIGNED INTEGER等价物。
https://laravel.com/docs/5.4/migrations
更新
若要创建自动增量不带符号字段,请执行以下操作:
$table->integer('id');
$table->primary('id');雄辩假设主键是一个递增的整数值,这意味着在默认情况下主键将自动转换为int。
https://laravel.com/docs/5.3/eloquent#eloquent-model-conventions
发布于 2019-06-17 17:04:58
我解决了这个问题:
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插入解释为真正的0,而不是主键生成请求。
发布于 2017-07-24 11:00:40
更改迁移文件。然后使用命令- php构件迁移。
public function up()
{
Schema::create('table_name', function (Blueprint $table) {
$table->increments('id');
$table->string('email')->index();
$table->string('token')->index();
$table->timestamp('created_at');
});https://stackoverflow.com/questions/45278691
复制相似问题