我只是想做一个记录,如果达到指定的限制就会重置ID。
我做这个迁移。
public function up(){
Schema::create('records', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->integer('age');
});
}
public function down(){
Schema::dropIfExists('records');
}
现在,我已经可以毫无问题地从我的数据库中插入数据了。
我只想有一个可以重置或更改我桌子上的 id 的功能。
这是示例条件。 示例:我的限制记录为 5,然后重置 id。 因此,如果我尝试插入一条记录,那么它会大于限制,它会将我表上的 id 重置为 1.
我试着做这个功能
public function insert_record(Request $request){
$record = new Record();
$record->name = $request->to_insert_name;
$record->age = $request->to_insert_age;
if($record->id == 5){
DB::update("ALTER TABLE records AUTO_INCREMENT = 1;");
Record::insert(
[
'name' => $request->to_insert_name;
'age' = $request->to_insert_age;
]
);
}else{
Record::insert(
[
'name' => $request->to_insert_name;
'age' = $request->to_insert_age;
]
);
}
}
但是我收到了这个错误。
SQLSTATE[42000]:[Microsoft][SQL Server 的 ODBC 驱动程序 17][SQL Server]“AUTO_INCREMENT”附近的语法不正确。
我试过另一个数据库语句来改变顺序。
DB::statement("UPDATE SQLITE_SEQUENCE SET seq = 1 WHERE name = 'records'");
但是,仍然有这个错误。
SQLSTATE[42S02]:[Microsoft][SQL Server 的 ODBC 驱动程序 17][SQL Server]无效的对象名称“SQLITE_SEQUENCE”。
ID 字段是唯一值。它不能包含重复值。你可以通过在表中添加一个整数类型的索引字段来做到这一点。
$table->integer('index');
将此添加到 Record 模型中。
/**
* Setup model event hooks
*/
public static function boot()
{
parent::boot();
self::creating(function ($model) {
$model->index = $model->index == 5 ? 1 : $model->max('index') + 1;
});
}