Laravel 8订单号生成方法return行报Undefined variable $last_number错误如何解决
问题原因
你的代码报错核心原因是else分支中没有给$last_number变量赋值:
- 首次运行时订单表为空,走
if (!$data)分支,正常给$last_number赋值,所以不会报错 - 第二次及之后运行时表内已有数据,走else分支,你最后一行错误地把自增后的编号赋值给了
$last_number_length变量,而代码后续要用到的$last_number完全没有被定义,所以触发未定义变量错误。
修复后的代码
public static function OrderNumberGenerator($model, $trow, $length = 4, $prefix) { $data = $model::orderBy('id', 'desc')->first(); if (!$data) { $og_length = $length; $last_number = 1; } else { $code = substr($data->$trow, strlen($prefix) + 1); $actual_last_number = intval($code); $increment_last_number = $actual_last_number + 1; $last_number_length = strlen($increment_last_number); $og_length = $length - $last_number_length; $last_number = $increment_last_number; } $zeros = ""; for ($i = 0; $i < $og_length; $i++) { $zeros .= "0"; } return $prefix . '-' . $zeros . $last_number; }
额外优化建议
补零逻辑可以直接用PHP内置的str_pad函数简化,不需要自己写for循环,修改后代码更精简:
public static function OrderNumberGenerator($model, $trow, $length = 4, $prefix) { $data = $model::orderBy('id', 'desc')->first(); $last_number = $data ? intval(substr($data->$trow, strlen($prefix) + 1)) + 1 : 1; return $prefix . '-' . str_pad($last_number, $length, '0', STR_PAD_LEFT); }
内容的提问来源于stack exchange,提问作者Moshiul Gazi
相关产品推荐
相关产品推荐

