#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. Не знаком с глобальным помощником, но спасибо за вашу помощь