在 Laravel 中使用数字前缀和其他字符串前缀制作代码
Posted
技术标签:
【中文标题】在 Laravel 中使用数字前缀和其他字符串前缀制作代码【英文标题】:Make a code with number prefix and other string prefix in Laravel 【发布时间】:2020-10-20 07:08:27 【问题描述】:我必须为交易编号制定格式,格式示例是BKK-202009-00001
。将自动递增的数字 00001。我已经尝试过,但没有得到预期的输出。
编码
public function createBefore($model, $arrayData, $metaData, $id=null)
//$arrayData["no_draft"] = $this->custom_getdraftid(null);
$prefix = 'BBK';
if ($arrayData['payment_type']=='CASH')
$prefix='BKK';
elseif ($arrayData['payment_type']=='GIRO')
$prefix='BGK';
ff($prefix);
$no_transaction = \DB::table('acc_tra_cash_bank_expenses_header')
->selectRaw(" '$prefix' || '-' ||to_char(CURRENT_DATE, 'YYYYMM')||'-'||RIGHT('0000'||(
RIGHT( (SELECT no_transaction FROM acc_tra_cash_bank_expenses_header WHERE no_transaction LIKE '$prefix'||to_char(CURRENT_DATE, 'YYYYMM')||'%'
ORDER BY id DESC LIMIT 1),5)::INTEGER+1)::TEXT,5) AS no_transaction")->first();
ff($no_transaction->no_transaction);
if (!$no_transaction)
$bulantanggal = date('Ym');
$no_transaction->no_transaction = "$prefix-$bulantanggal-00001";
$newModel = $model;
$newArrayData = array_merge($arrayData, [
'no_draft'=> $this->custom_getdraftid(null),
'no_transaction' => $no_transaction->no_transaction
]);
return [
"model" => $newModel,
"data" => $newArrayData,
];
【问题讨论】:
00001
,它是来自像id
这样的任何地方,还是你必须自己增加它??
不要从任何地方增加它
您要添加多少个零?比如如果数字是 1000 或 99 或 99999,那么预期的输出是什么??
00001 四个零如果数字 1000 01000
你说你没有得到预期的输出,但你没有分享你得到的结果。与我们分享您所看到的非常有帮助。
【参考方案1】:
如果我对您的理解正确,您需要像BKK-202009-00001
这样带有递增数字的格式。一个解决方案就像
$string = 'BKK-202009-00001'; //the last entry from the database
$number = last(explode("-",$string)); //explode the string to get the number part, last is a laravel helper
$new = str_pad(intval($number) + 1, 5, 0, STR_PAD_LEFT); //increment the number by 1 and pad with 0 in left.
$no_transaction->no_transaction = $prefix.'-'.$bulantanggal.'-'.$new; //concat string and number to generate the desired output
【讨论】:
我得到错误explode()期望参数2是给定的字符串对象 你通过什么来代替$string
爆炸??你必须传递一个对象属性而不是对象本身。
查询构建器 $no_transaction = \DB::table('acc_tra_cash_bank_expenses_header') ->selectRaw(" '$prefix' || '-' ||to_char(CURRENT_DATE, 'YYYYMM')|| '-'||RIGHT('0000'||( RIGHT( (SELECT no_transaction FROM acc_tra_cash_bank_expenses_header WHERE no_transaction LIKE '$prefix'||to_char(CURRENT_DATE, 'YYYYMM')||'%' ORDER BY id DESC LIMIT 1), 5)::INTEGER+1)::TEXT,5) AS no_transaction")->first();
点赞$no_transaction->no_transaction
你能告诉我$no_transaction->no_transaction
是什么吗??以及当前生成的输出是什么??以上是关于在 Laravel 中使用数字前缀和其他字符串前缀制作代码的主要内容,如果未能解决你的问题,请参考以下文章