Laravel/Ajax DELETE: вызов функции-члена delete() при нулевом значении

Как следует из названия, я получаю сообщение об ошибке, когда пытаюсь удалить свои данные с помощью laravel/ajax и функции внутри контроллера:

1

Контроллер:

public function destroy($category_id) {
    $category_delete = HmsBbrCategory::find($category_id);
    $category_delete->delete();
    return response()->json([
        'status'=>200,
        'message'=>'Category Deleted!',
    ]);

}

Форма и Ajax:

`delete_category` is the id that opens the delete modal and `delete_category_btn` is the button that will delete the data.

<button type="submit" class="btn btn-primary btn-block delete_category_btn"></i>Yes</button>
<button type="button" value="${cat.category_id}" class="delete_category btn btn-outline-secondary"><i class="fas fa-trash"></i> Delete</button>


        $(document).on('click', '.delete_category', function (e) {
            e.preventDefault();
            //click this button(delete_category) to get the value(category_id)
            var cat_id = $(this).val(); 
            // alert(cat_id);
            $('#delete_cat_id').val(cat_id);
            $('#deleteCategoryModal').modal('show');
        });
        $(document).on('click', '.delete_category_btn', function (e) {
            e.preventDefault();
            var cat_id = $('#delete_cat_id').val();
            // alert(cat_id);
            //token taken from laravel documentation
            $.ajaxSetup({
                headers: {
                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                }
            });
            $.ajax({
                type: "DELETE",
                url: "/clinical/bbr-category-configuration-delete/"+cat_id,
                dataType: "dataType",
                success: function (response){
                    // console.log(response);
                    $('#category_notif').addClass('alert alert-success');
                    $('#category_notif').text(response.message);
                    $('#deleteCategoryModal').modal('hide');
                }
            });
        });

Маршрут:

Route::delete('/bbr-category-configuration-delete/{category_id}', [BBRCategoryConfigurationController::class,'destroy']);

Что следует отметить:

  • Я пошел дальше и показал category_id внутри модального окна, чтобы доказать, что таблица извлекается.

вторая функция ajax для кнопки удаления: $(document).on('click', '.delete_category_btn', function (e), я также пытался показать идентификатор с помощью alert(cat_id);, чтобы также доказать, что идентификатор все еще распознается внутри модального окна:

2

Даже если присутствует category_id, проверка страницы после попытки удаления по-прежнему показывает:

message: "Call to a member function delete() on null"

Что я могу сделать, чтобы решить эту проблему? спасибо за любую помощь.


person Community    schedule 23.06.2021    source источник
comment
Что произойдет, если вы вызовете findOrFail() вместо find?   -  person shaedrich    schedule 23.06.2021
comment
Проверьте, получаете ли вы идентификатор в контроллере?   -  person Yasin Patel    schedule 23.06.2021
comment
если вы находите столбец category_id, то это должно быть $category_delete = HmsBbrCategory::where('category_id',$category_id)-›first(); или же записи нет в БД.   -  person John Lobo    schedule 23.06.2021


Ответы (1)


$category_delete объект недействителен. Возможно, вы отправляете неверный $category_id. Если вы проверите, что категория существует перед удалением, вы избежите этой ошибки.

public function destroy($category_id) {
    $category_delete = HmsBbrCategory::find($category_id);

    if($category_delete) {
        $category_delete->delete();
        return response()->json([
            'status'=>200,
            'message'=>'Category Deleted!',
        ]);
    }
    
    return response()->json([
        'status'=>404,
        'message'=>'Category Not Found!',
    ]);
}
person Mohammad Hosseini    schedule 23.06.2021