获取要在laravel中生成的发票编号

时间:2019-02-28 13:19:00

标签: php laravel

我正在尝试生成发票编号,但是却得到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”

4 个答案:

答案 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。 希望它能帮助您实现您想要的。