Laravel 查询构建器将 id 设置为 0 无效
Laravel query builder setting id to 0 not working
我正在播种类别 table,当我 运行:
DB::table('cats')->insert([
'id' => 0,
'parent_cat_id' => null,
'name' => 'Uncategorized'
]);
但是插入的行的 id 将为 1,如果我尝试在 db 上手动更新 id 这是可能的。
除零以外的任何值都适用于查询生成器(例如 'id'=>5
)
编辑:
目前这个 hack 正在工作,如果 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();
});
您似乎定义了 id
列:
$table->increments('id');
相当于UNSIGNED INTEGER
。
https://laravel.com/docs/5.4/migrations
更新
要创建自动递增非无符号字段,请执行以下操作:
$table->integer('id');
$table->primary('id');
Eloquent assumes that the primary key is an incrementing integer value, which means that by default the primary key will be cast to an int automatically.
https://laravel.com/docs/5.3/eloquent#eloquent-model-conventions
更改您的迁移文件。然后使用命令 - php artisan migrate
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');
});
我用这个解决了:
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 生成请求。
我正在播种类别 table,当我 运行:
DB::table('cats')->insert([
'id' => 0,
'parent_cat_id' => null,
'name' => 'Uncategorized'
]);
但是插入的行的 id 将为 1,如果我尝试在 db 上手动更新 id 这是可能的。
除零以外的任何值都适用于查询生成器(例如 'id'=>5
)
编辑:
目前这个 hack 正在工作,如果 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();
});
您似乎定义了 id
列:
$table->increments('id');
相当于UNSIGNED INTEGER
。
https://laravel.com/docs/5.4/migrations
更新
要创建自动递增非无符号字段,请执行以下操作:
$table->integer('id');
$table->primary('id');
Eloquent assumes that the primary key is an incrementing integer value, which means that by default the primary key will be cast to an int automatically.
https://laravel.com/docs/5.3/eloquent#eloquent-model-conventions
更改您的迁移文件。然后使用命令 - php artisan migrate
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');
});
我用这个解决了:
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 生成请求。