Laravel 8.0 столкнулся с проблемой при попытке обновить таблицу с помощью формы vue, «Попытка прочитать свойство «item_id» на null»

#laravel #vue.js

Вопрос:

Итак, у меня есть таблица под названием Таблица элементов и другая таблица под названием item_quantities, в item_quantities у меня есть столбец с именем item_id, который связан с идентификатором таблицы элементов. Все заполняемые свойства в обеих таблицах находятся в одной форме на интерфейсе, и я забочусь о полях формы на серверной части Всякий раз, когда я пытаюсь обновить количество в форме, которое находится в таблице item_quantities с помощью формы, я сталкиваюсь с серьезной проблемой обновления item_quantities. получение Попытки прочитать свойство «item_id» на null. Все началось с того, что я заметил дубликаты записей в таблице количества товаров, поэтому я удалил все данные в ней.. Вот скриншот формы Форма vue

и внутренняя логика

   public function saveData(Request $request, $id) {
    // dd($request->name);
    $updateGroceries = Item::where('id', $request->id)->get()->first();
    $updateGroceries->update([
        'name' => $request->name,
        'description' => $request->description,
        'price' => $request->price,

    ]);
    if($updateGroceries) {
        $item_quantity = ItemQuantity::where('item_id', $updateGroceries->id) ? 
        ItemQuantity::where('item_id', $updateGroceries->id)->get()->first()  :
        new ItemQuantity;
       
        if($item_quantity->item_id == null) {
            $item_quantity->item_id = $updateGroceries->id;
        }
        $item_quantity->quantity = $request->quantity;
        $item_quantity->save();
       
    }

   
}
 

МНЕ ТАК ЖАЛЬ, ЕСЛИ МОЙ АНГЛИЙСКИЙ БЫЛ НЕДОСТАТОЧНО ИЗУЧЕН
Спасибо в предвкушении

Комментарии:

1. Проблема в -get()->first() том , что он возвращает значение null, и при попытке доступа к его item_id свойству возникает ошибка

2. Вот почему я определил его с помощью тернарного оператора, если он не найдет первый, то он должен создать его с помощью нового. Не уверен, что это условие работает

3. Не могли бы вы, пожалуйста, опубликовать свой код в виде текста вместо изображения, чтобы ваш вопрос был понятен, когда изображение может быть удалено в будущем?

4. хорошо, спасибо за это

5. @DipoDeen условие в вашей тройке не выполняется, оно просто возвращает экземпляр построителя запросов и всегда будет оценено как true. Возможно, вы захотите выполнить его с count помощью, чтобы получить количество записей.

Ответ №1:

Вы можете просто использовать firstOrNew() метод. Это позволит сначала найти элемент, если он не существует, создать новый экземпляр.

 $item_quantity = ItemQuantity::firstOrNew(['item_id' =>  $updateGroceries->id]);
$item_quantity->quantity = $request->quantity;
$item_quantity->save();
 

Обратите внимание, что возвращенная модель firstOrNew() еще не сохранена в базе данных. Вам нужно будет вручную вызвать save метод, чтобы сохранить его.

Комментарии:

1. Это здорово! Попробуйте изучить документацию Laravel.

Ответ №2:

На самом деле ваш рабочий процесс ошибок таков:

 $item_quantity=null;
$item_quantity->item_id;
 

Вы можете сделать это с помощью дополнительного глобального помощника:

 optional($item_quantity)->item_id ?: 'default value';
 

Комментарии:

1. Не знаком с глобальным помощником, но спасибо за вашу помощь