首页 > 解决方案 > 在 Laravel 5 中的一对多关系中将外键设置为 Null

问题描述

我的问题与 Laravel 5.6 有关。我有PostCategory模型。它们具有一对多的关系,在表中category_id作为外键。postscategory_id空字段

//Post Model
class Post extends Model
{
   public function category()
   {
       return $this->belongsTo('App\Category', 'category_id', 'id');
   }
}

//Category Model
class Category extends Model
{
   public function posts()
   {
       return $this->hasMany('App\Post', 'category_id', 'id');
   }
}

我的问题是,如果我删除一个类别。如何将tablecategory_id中的所有关联帖子设置为 null ?posts

我知道 laravel 提供dissociate方法,但我认为这是为了belongsTo关系。有没有类似下面的东西?

$category::find($id);    
$category->posts()->dissociate(); //set all foreign key(category_id) to null in posts table
$category->delete();

标签: phplaravel-5eloquentforeign-keysrelationship

解决方案


您不想自己处理这个问题,让外键处理它(如 CD001 建议的那样):

Schema::create('posts', function (Blueprint $table) {
    [...]
    $table->foreign('category_id')->references('id')->on('categories')
      ->onDelete('set null');
});

推荐阅读