Php 在Laravel 5中的一对多关系中将外键设置为Null

Php 在Laravel 5中的一对多关系中将外键设置为Null,php,laravel-5,eloquent,foreign-keys,relationship,Php,Laravel 5,Eloquent,Foreign Keys,Relationship,我的问题与Laravel 5.6有关。我有Post和Category型号。它们具有一对多关系,在posts表中以category\u id作为外键。category\u id字段可为空 //Post Model class Post extends Model { public function category() { return $this->belongsTo('App\Category', 'category_id', 'id'); } } //

我的问题与Laravel 5.6有关。我有
Post
Category
型号。它们具有一对多关系,在
posts
表中以
category\u id
作为外键。
category\u 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');
   }
}
我的问题是,如果我删除一个类别。如何将
posts
表中所有相关posts的
category\u id
设置为空

我知道laravel提供了分离的方法,但我认为这是为了
属于关系。下面有类似的东西吗

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

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


我不是拉威尔的专家,但你不会在数据库里做这件事吗?使用外键
删除SET NULL
键入内容…谢谢,这是一个非常好的建议,我将进一步研究。但我还是在用拉雷维尔的方式看。谢谢。同意这是更好的解决方案。我做了太多不必要的尝试。这就是我想做的,但是你的解决方案更好更干净<代码>$category=category::find($id)$posts=$category>posts();foreach($posts as$post){$post->category()->dissection();$post->save();}
Schema::create('posts', function (Blueprint $table) {
    [...]
    $table->foreign('category_id')->references('id')->on('categories')
      ->onDelete('set null');
});