Laravel5.6 "Вызов функции-члена delete() на null ", удаление строки в таблице
Я хочу удалить строку из таблицы. Функция, которую я использовал в контроллере:
public function destroy($id) {
$category = Category::find($id);
$category->delete();
return redirect()->back();
}
Однако это выдает мне ошибку:
Вызов функции-члена delete() в null
Когда я использую этот код:
public function destroy($id) {
$category = Category::find($id);
dd($id);
}
Это показывает правильный идентификатор, т.е.
"1"
И когда я использую
public function destroy($id) {
$category = Category::find($id);
dd($category); // or
dd(Category::find($id);
}
Я получаю вывод
ноль
на экране.
1 ответ
Как упоминалось в комментариях, ошибка, которую вы получаете, вероятно, связана с тем, что в базе данных не существует категории для данного идентификатора.
Затем, когда вы пытаетесь найти категорию для этого идентификатора:
$category = Category::find($id);
Значение $category
переменная null
, Таким образом, вы получаете сообщение об ошибке при попытке позвонить delete()
метод на null
, Под капотом это было бы так же, как делать следующее:
null->delete();
Который, не работает.
Вы можете проверить значение $category
прежде чем пытаться удалить его. Или вы можете использовать запрос для удаления всех записей, соответствующих заданному условию, в вашем случае id = $id
, Сюда:
public function destroy($id)
{
Category::where('id', $id)->delete();
return redirect('/')->back();
}
Обратитесь к разделу "Удаление моделей по запросу" в документах Eloquent, чтобы узнать, как это работает.
Для меня сработало следующее (я убедился, что $id передавался из представления):
public function destroy($id)
{
$vendor = Vendor::findorFail($id);
$vendor->delete():
}
по какой-то причине, когда я сделал следующее, он показал нулевой
public function destroy($id)
{
$vendor = Vendor::find($id);
$vendor->delete():
}
Это часть просмотра:
{!! Form::open(array(
'style' => 'display: inline-block;',
'method' => 'DELETE',
'onsubmit' => "return confirm('".trans("global.app_are_you_sure")."');",
'route' => ['vendor.destroy', $vendor->vendor_id])) !!}
{!! Form::submit(trans('global.app_delete'), array('class' => 'btn btn-xs btn-danger')) !!}
{!! Form::close() !!}