Laravel5.6 «Вызов функции-члена delete () на null», удаление строки в таблице - PullRequest
0 голосов
/ 27 апреля 2018

Я хочу удалить строку из таблицы. Функция, которую я использовал в контроллере:

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

я получаю вывод

1025 * пустой *

на экране.

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Для меня сработало следующее (я убедился, что $ id проходил из представления) :

public function destroy($id)
{
    $vendor = Vendor::findorFail($id);
    $vendor->delete():
}

по какой-то причине, когда я сделал следующее, он показал null

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() !!}
0 голосов
/ 27 апреля 2018

Как уже упоминалось в комментариях, ошибка, которую вы получаете, вероятно, связана с тем, что в базе данных не существует категории для данного идентификатора.

Затем, когда вы пытаетесь найти категорию для этого идентификатора:

$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 docs для получения подробной информации о том, как это работает.

...