Объект класса 'modelName' не может быть преобразован в int в laravel

Я пытаюсь создать номер счета-фактуры, например - 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 может быть просто count($check) + 1. В течение года вы можете записать $numOfInvoices = count(check), а затем просто вызвать в $numOfInvoices++. Обновлено: я только что заметил, что вы даже не сохраняете новый счет в функции создания, поэтому число никогда не будет увеличиваться, если вы их не сохраните?

user5283119 17.05.2018 10:55

Не могли бы вы сбросить $invoiceNo? Это объект или int?

bigwolk 17.05.2018 10:56

Для моей предыдущей записи я вручную вставил в invoice_no поле HCL/LF/01/2018

Rashed Hasan 17.05.2018 11:02
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
2 902
2

Ответы 2

У вас есть ошибка в этой строке:

$invoiceNo = OrderProformaInvoice::latest()->first(['invoice_no']);

Верный:

$invoiceNo = OrderProformaInvoice::latest()->get()->invoice_no;

Теперь получаю ошибку Undefined property: Illuminate\Database\Eloquent\Builder::$invoice_no.

Rashed Hasan 17.05.2018 11:01

Вы ошиблись здесь:

$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'));
}

Какую ошибку вы получаете? Это не означает, что вы получили ошибку в своем вопросе.

user5283119 17.05.2018 11:09

Если вы все еще получаете ModelName, который не может быть преобразован в int, это будет из этой строки здесь: $arr = array('HCL','LF', $invoiceNo + 1, $year); Где $ invoiceNo Я предполагаю, что это ваша модель, dd($invoiceNo) или var_dump($invoiceNo), и сообщите нам, что это дает вам.

user5283119 17.05.2018 11:14

Я обновил свой ответ, удалив оператор if, поскольку это было бы бессмысленно, если бы вы просто брали $ numOfInvoices и добавляли его каждый раз. Вы также можете использовать DB::table('invoice_table')->count();, который вернет int. Тогда не было бы необходимости в count($check). Вы можете узнать об этом здесь, прокрутив вниз до агрегатов

user5283119 17.05.2018 12:43

Другие вопросы по теме