我正在尝试生成发票编号,但是却得到A non-numeric value encountered
。
我想我缺少了一些东西,但不确定是什么。
这是我的helpers.php中的invoiceNumber()代码
function invoiceNumber()
{
$orders = App\Order::all();
if($orders->isEmpty())
{
$invoice = 'arm0001';
return $invoice;
}
foreach($orders as $order)
{
$latest = App\Order::latest()->first();
if($latest->invoice_number == true)
{
$invoice = 'arm'.$latest->invoice_number+1;
return $invoice;
}
}
}
这就是我要尝试的地方
public function deliveryConfirmation()
{
$menus_child = Menu::where('menu_id', 0)->with('menusP')->get();
$contacts = Contact::all();
if(!Session::has('cart'))
{
return view('public.shopping-cart', compact('menus_child', 'contacts'));
}
$oldCart = Session::get('cart');
$cart = new Cart($oldCart);
$invoice_number = invoiceNumber();
dd($invoice_number);
return view('public.delivery-confirmation', ['products' => $cart->items, 'totalPrice' => $cart->totalPrice, 'menus_child' => $menus_child, 'contacts' => $contacts, 'invoice_number' => $invoice_number]);
}
我也很想在数据库中保留“ ARM”
答案 0 :(得分:0)
尝试一下:
$invoice = 'arm' . ((int)$latest->invoice_number + 1);
...并带有前导零(ARM0001):
$invoice = 'arm' . (str_pad((int)$latest->invoice_number + 1, 4, '0', STR_PAD_LEFT));
答案 1 :(得分:0)
因此,在看到每个人的回答和我的理解之后,似乎每个人都在将整数从字符串中分离出来以使其工作,这让我开始考虑做一个preg_replace()
。所以我已经调整了代码,使其看起来像这样
function invoiceNumber()
{
$latest = App\Order::latest()->first();
if (! $latest) {
return 'arm0001';
}
$string = preg_replace("/[^0-9\.]/", '', $latest->invoice_number);
return 'arm' . sprintf('%04d', $string+1);
}
答案 2 :(得分:0)
原因是因为.
和+
的{{3}}相同,因此,它们从左到右进行评估。
因此,如果将其分解,则会得到:
(('arm'.$latest->invoice_number)+1) -> ('arm123'+1)
其中arm123
是一个非数字值。
在这种情况下,您需要使用括号强制执行评估顺序:
'arm'.($latest->invoice_number+1)
答案 3 :(得分:0)
您可以仅通过递增++
来递增编号,并保留发票编号前缀。
喜欢,
$invoice = 'arm'.++$latest->invoice_number;
++$latest->invoice_number
,这会使您的电话号码增加1。
希望它能帮助您实现您想要的。