猿问

删除时的 Laravel 关系

我正在编写具有三个表的 laravel 应用程序

  1. 类别

  2. 公司

  3. 优惠券

优惠券有 category_id , company_id 关系问题是当我删除类别时我想在优惠券表中将 category_id 设置为 null而不是将它留在那里因为离开它会导致问题我看到 foreigen 键和 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();

关于其他表,他们只有 title , image , id 所以不需要共享它们


分类删除功能


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 或对此做些什么


提前致谢


慕桂英4014372
浏览 71回答 1
1回答

幕布斯7119047

请执行下列操作: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');}
随时随地看视频慕课网APP
我要回答