我正试图使一个自动增量代码与日期,它将重置代码的其他一天。
我有这种迁移。
public function up()
{
Schema::create('records', function (Blueprint $table) {
$table->id();
//other codes here...
});
}
然后,我添加一个列,它将使用
ALTER TABLE id ADD my_id AS RIGHT('00000' + CAST(id AS VARCHAR(5)) , 5) PERSISTED
我的控制器上有此查询
public function get_records(Request $request){
$records = DB::table('records')->select(
'records.my_id',
//other codes here...
)
->get();
$recordlist = [];
$currentMonth = Carbon::now()->format('mm');
$currentDay = Carbon::now()->format('dd');
foreach($records as $data):
$data->CODE = 'Z' . $currentMonth . $currentDay . '-' .$data->my_id;
$recordlist[] = $data;
endforeach;
return recordlist;
// OUTPUT --> CODE: 'Z0331-0001'
}
我希望我的输出像..
today is 03/31
CODE:
Z0331-00001
Z0331-00002
Z0331-00003
.....
Z0331-00010
Z0331-00011
Z0331-00012
.....
Z0331-00100
Z0331-00101
Z0331-00102
//The other day(04/01)..
CODE:
Z0401-00001
Z0401-00002
Z0401-00003
.....and so on
我刚想到这笔交易。
我只是加了一张table
ALTER TABLE records DROP COLUMN my_id
ALTER TABLE records ADD my_id VARCHAR(5) NOT NULL
那么,我的疑问是。
$createdrecord = //last created record ex(CODE: 'Z0330-00265' created_at: '03/30(yesterday)' )
$today = Carbon::now();
foreach($records as $data){
if($today != $createdrecord){
$data->my_id = '00000';
}else{
$data->my_id += 1;
}
}
我想这将确定,但我的代码不顺利..
谢谢你的帮助。
2条答案
按热度按时间dwthyt8l1#
您需要一个存储计数器的辅助表。它必须有2列:
每次生成
record
时,您必须检查计数器表中是否有当前日期的内容。如果它是空的-使用ID = 1并将其存储在计数器表中。
如果它不为空,则使用counter + 1并递增counter
kmbjn2e32#
这是NoooZ 24提供的想法的实现,所以一定要给予他一个支持/信用。
首先,你需要一个序列表:
下面是一个MySQL存储过程,它将充当序列生成器:
在命令行中,您可以使用CALL运行此存储过程:
查看代码,您应该注意到它将为日期创建一个序列行(如果不存在),并返回初始值1。
再次运行它,您将看到下一个值,依此类推。
上次我看到的是,没有一种方法可以从Eloquent调用mysql存储过程,所以你必须使用DB::select或构建查询。