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

时间:2018-09-12 09:57:36

标签: php laravel-5 eloquent foreign-keys relationship

我的问题与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');
   }
}

我的问题是,如果我删除类别。如何将category_id表中所有相关帖子的posts设置为null?

我知道laravel提供dissociate方法,但是我认为这是针对belongsTo关系的。是否有类似下面的内容?

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

1 个答案:

答案 0 :(得分:3)

您不想自己照顾它,让外键处理它(如CD001所建议):

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