laravel отношения при удалении - PullRequest
0 голосов
/ 20 апреля 2020

я программирую laravel приложение, которое имеет три таблицы

  1. категории
  2. компании
  3. купоны

и у купонов есть category_id, company_id для отношений дело в том, что когда я удаляю категорию, я хочу установить в таблице купонов category_id в null вместо того, чтобы оставлять ее там, потому что выход из нее вызовет проблемы, которые я видел для внешних ключей и onDelete, но я не могу понять это, я поделюсь миграцией и методом удаления

миграция купонов

 $table->id();
        $table->string('title');
        $table->string('link');
        $table->longText('terms');
        $table->string('show_image');
        $table->string('coupon_code');
        $table->tinyinteger('special');
        $table->integer('category_id');
        $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');;
        $table->integer('company_id');
        $table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade');;
        $table->timestamps();

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

Функция удаления категории

public function destroy(Request $request , $id)
{
    $destroy_category = Categories::find($id);
    //delete the icon
    $icon = $destroy_category->icon;
    File::delete(public_path($icon));
    $destroy_category->delete();
    return redirect('/category/index')->with('success' , 'Category Deleted Successfully');
}

пожалуйста, покажите мне, как я должен установить для category_id значение null или что-то с этим сделать

Заранее спасибо

1 Ответ

1 голос
/ 20 апреля 2020

Выполните следующие действия:

  • php artisan make:observer CategoryObserver
  • Открыть app/Observers/CategoryObserver.php
  • В методе deleting() укажите это:
    //delete the icon
    $icon = $destroy_category->icon;
    File::delete(public_path($icon));
    $destroy_category->delete();
  • Откройте app/Provivers/AppServiceProvider.php и поместите его в метод boot():
Category::observe(CategoryObserver::class); //import the class correctly
  • Измените код контроллера следующим образом:
public function destroy(Request $request , $id)
{
    $destroy_category = Categories::find($id);
    $destroy_category->delete(); //this will fire the CategoryObserver::deleting() method

    return redirect('/category/index')->with('success' , 'Category Deleted Successfully');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...