如何在Laravel项目中实现从PostgreSQL到ID生成器的nextval();
函数?
我已经尝试了ChatGPT的建议,但它不工作,我也搜索了有关nextval
的文档,但仍然不能让它在我的项目中工作。
这是我生成ID的函数,我的ID生成规则是,在生成未分配的ID之前,它将扫描StudentModel
和PersonModel
的学生ID和ID列,然后ID将以前缀20开头,并且长度必须仅为7位。生成ID号没有问题,但我希望在我的函数中实现nextval()
。
Route::get('/check-student-id', function() {
$prefix = "20";
$lastId = max(StudentModel::max('Student ID'), PersonModel::max('id'));
$suffix = str_pad(($lastId % 100000) + 1, 5, '0', STR_PAD_LEFT);
$newId = $prefix . $suffix;
$existingIds = array_merge(
StudentModel::pluck('Student ID')->toArray(),
PersonModel::pluck('id')->toArray()
);
while (in_array($newId, $existingIds)) {
$suffix = str_pad(($suffix % 100000) + 1, 5, '0', STR_PAD_LEFT);
$newId = $prefix . $suffix;
}
return $newId;
});
1条答案
按热度按时间s1ag04yj1#
nextval
用于获取SEQUENCE的下一个值,您所要求的与此无关,您只需要为id字段给予一个默认值。这可以通过在创建模型时更新字段来实现
这仅限于在使用Eloquent来持久化数据时才起作用。
如果您希望无论如何持久化数据,表都能自动获得该值,那么您需要在数据库中实现该逻辑