Laravel - 更新错误,无法重置 ID 或自动递增

问题描述 投票:0回答:1

我只是想做一个记录,如果达到指定的限制就会重置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”。

我怎样才能实现如下图的输出?

sql-server laravel single-page-application
1个回答
0
投票

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;
    });
}
© www.soinside.com 2019 - 2024. All rights reserved.