Laravel - ERROR UPDATE and can't reset ID or AUTO INCREMENT

fgw7neuy  于 2023-04-13  发布在  其他
关注(0)|答案(1)|浏览(197)

我只是想做一个记录,如果达到指定的限制,将重置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][ODBC Driver 17 for SQL Server][SQL Server]在“AUTO_INCREMENT”附近语法不正确。
我尝试了另一个DB语句来更改序列。

DB::statement("UPDATE SQLITE_SEQUENCE SET seq = 1 WHERE name = 'records'");

但是,还是出现了这个错误。
SQLSTATE[42S02]:[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]对象名称“SQLITE_SEQUENCE”无效。
如何实现像下面这样的输出?

zwghvu4y

zwghvu4y1#

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;
    });
}

相关问题