我在Laravel 5.1中使用oracle序列和yajra / laravel-oci8库(v.5.1)时遇到问题。
我的情景是:
trailer_id
的列。该列包含使用名为trailed_id_seq
的序列生成的ID。代码:
function postCreate(Request $request) {
$id = $request->input('id');
DB::beginTransaction();
....
$running_no_seq = DB::getSequence();
$trailer_id = $running_no_seq->nextValue('trailer_id_seq')."";
for($i=0; $i < $counter; $i++) {
// Some process, it can take a while here...
}
DB::table('A')->where('id',$id)->update([
'trailer_id' => $trailer_id
]);
DB::commit();
}
许多用户都可以调用此功能。
问题是:
为什么trailer_id
列在不同时间由不同用户访问时可能会重复?
我的问题:这怎么可能?我怎么修理它? (我无法将trailer_id
列设为唯一的)
我已经阅读了yajra oci docs:
https://yajrabox.com/docs/laravel-oci8/master/sequence,是代码DB::getSequence()->nextValue('seq_name');
只返回下一个值而不更新序列?
因为在oracle文档中,nextval
会递增序列并返回下一个值(https://docs.oracle.com/cd/A84870_01/doc/server.816/a76989/ch26.htm#4062)。
请帮帮我。谢谢你的回答!