在 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 中使用数字前缀和其他字符串前缀制作代码的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中添加前缀路由名称而不添加前缀 URI

Laravel 8.x 顺风前缀

MySQL字符串索引&脏页刷盘

如何在 Laravel 中使用正则表达式路由前缀?

在 laravel 中使用前缀后,asset('assets') 返回错误的目录

Laravel 4 - PHP 标签在工匠控制台和渲染页面中添加前缀