Я пытаюсь создать номер счета-фактуры, например - HCL/LF/02/2018, в котором номер будет увеличен на единицу для нового счета-фактуры. Может ли кто-нибудь помочь мне получить ожидаемый invoice_no? Я пробовал что-то подобное в своем контроллере -
public function create()
{
$check = OrderProformaInvoice::orderBy('created_at', 'DESC')->get();
$number = 01;
$year = date('Y');
if (count($check) > 0) {
$invoiceNo = OrderProformaInvoice::latest()->first(['invoice_no']);
$arr = array('HCL','LF', $invoiceNo + 1, $year);
$newInvoiceNo = implode("/",$arr);
}else{
$arr = array('HCL','LF', $number, $year);
$newInvoiceNo = implode("/",$arr);
}
return view('admin.marchendaising.order-proforma-invoices.create', compact('newInvoiceNo'));
}
И, на мой взгляд, поле ввода формы -
<input type = "text" name = "invoice_no" class = "form-control" value = "{{ $newInvoiceNo }}">
Не могли бы вы сбросить $invoiceNo? Это объект или int?
Для моей предыдущей записи я вручную вставил в invoice_no поле HCL/LF/01/2018






У вас есть ошибка в этой строке:
$invoiceNo = OrderProformaInvoice::latest()->first(['invoice_no']);
Верный:
$invoiceNo = OrderProformaInvoice::latest()->get()->invoice_no;
Теперь получаю ошибку Undefined property: Illuminate\Database\Eloquent\Builder::$invoice_no.
Вы ошиблись здесь:
$invoiceNo = OrderProformaInvoice::latest()->first(['invoice_no']);
В этой строке не было необходимости, так как у вас уже есть счетчик всех OrderProformaInvoice, поэтому мы можем также установить его в переменную и просто увеличить ее для новой, а не делать еще один вызов базы данных.
Если вам когда-либо приходилось удалять запись в базе данных, вы могли бы использовать
$invoice = OrderProfromaInvoice::orderBy('created_at', 'desc')->first();
Затем вместо $numOfInvoices++ вы можете использовать $invoice->id++, который будет брать идентификатор последнего счета и увеличивать его на единицу.
public function create()
{
$check = OrderProformaInvoice::orderBy('created_at', 'DESC')->get();
$year = date('Y');
$numOfInvoices = count($check)
$arr = array('HCL','LF', $numOfInvoices++, $year);
$newInvoiceNo = implode("/",$arr);
// You could also just do this
$newInvoiceNo = 'HCL/LF/' . $numOfInvoices++ . '/' . $year;
// $newInvoiceNo will equal example: 'HCL/LF/12/2018';
return view('admin.marchendaising.order-proforma-invoices.create', compact('newInvoiceNo'));
}
Какую ошибку вы получаете? Это не означает, что вы получили ошибку в своем вопросе.
Если вы все еще получаете ModelName, который не может быть преобразован в int, это будет из этой строки здесь: $arr = array('HCL','LF', $invoiceNo + 1, $year); Где $ invoiceNo Я предполагаю, что это ваша модель, dd($invoiceNo) или var_dump($invoiceNo), и сообщите нам, что это дает вам.
Я обновил свой ответ, удалив оператор if, поскольку это было бы бессмысленно, если бы вы просто брали $ numOfInvoices и добавляли его каждый раз. Вы также можете использовать DB::table('invoice_table')->count();, который вернет int. Тогда не было бы необходимости в count($check). Вы можете узнать об этом здесь, прокрутив вниз до агрегатов
Что вы получите при запуске этого кода? Также для номера счета-фактуры, поскольку вы уже позвонили в БД, чтобы получить все свои счета, вашим
$invoiceNoможет быть простоcount($check) + 1. В течение года вы можете записать$numOfInvoices = count(check), а затем просто вызвать в$numOfInvoices++. Обновлено: я только что заметил, что вы даже не сохраняете новый счет в функции создания, поэтому число никогда не будет увеличиваться, если вы их не сохраните?