我有一张表(比如发票),其中有一个主键(自动增量)。 但是我需要另一个参考号,它也应该是唯一的,并且应该基于以下模式。
INV-{Ymd}-{unique number for that day}
其中: INV - 是联系人前缀 {Ymd} - YYYMMDD格式的日期 {当天的唯一编号} - 是当天的序列号。(应该是自动增量,但应该每天从0开始。
示例
答案 0 :(得分:1)
您可以使用相同的表格执行此操作无需创建其他表格或列。
假设发票表中的列名称为 reference_number 。
首先,从您的表中获取最新记录。(您可以通过主键或插入日期获取
)$data=Invoice::find()->select('reference_number')->orderBy(['your_primary_key' => SORT_DESC])->one();
if($data) // record found
{
$temp= explode('-',$$data['reference_number']); // devide data in array
// compare with today's date,
if((int)$temp[1]==(int)date('Ymd'))
{
// if today's date match than increase number and create reference_number
$reference_number="INV".date('Ymd').((int)$temp[2]+1);
}
else // reference_number is from old date so you can create from today's date
{
$reference_number="INV".date('Ymd')."0";
}
}
else // record not found,(no record in your table)
{
// you can directly create reference_number from today's date
$reference_number="INV".date('Ymd')."0";
}
答案 1 :(得分:0)
这是我用来生成发票ID的示例代码
$seq = Sequence::FindOne(['seq_id' => 'INV/AG', 'seq_name' => (int)date('ymd')]);
if(is_null($seq))
{
$_seq = new Sequence();
$_seq->seq_id = 'INV/AG';
$_seq->seq_name = (int)date('ymd');
$_seq->value = 0;
$_seq->save();
$model->trx_id = $_seq->seq_id . '/' . $_seq->seq_name . str_pad($_seq->value+1, 3, "0", STR_PAD_LEFT);
}
else {
$seq->value += 1;
$model->trx_id = $seq->seq_id . '/' . $seq->seq_name . str_pad($seq->value, 3, "0", STR_PAD_LEFT);
$seq->update();
}
首先,您需要创建包含seq_id,seq_name和value的表序列。 这种格式会生成ex:INV / AG / 160917004
希望这能回答你的问题。