Установите для внешнего ключа значение NULL в отношениях один-ко-многим в Laravel 5

Мой вопрос связан с Laravel 5.6. я имею Post а также Category моделей. Они имеют отношения один ко многим, с category_id как внешний ключ в posts Таблица. category_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 Таблица?

Я знаю, что Laravel обеспечивают dissociate метод, но я думаю, что это для belongsTo отношения. Есть ли что-то похожее на ниже?

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

1 ответ

Решение

Вы не хотите заботиться об этом сами, пусть внешний ключ обрабатывает это (как предложено CD001):

Schema::create('posts', function (Blueprint $table) {
    [...]
    $table->foreign('category_id')->references('id')->on('categories')
      ->onDelete('set null');
});
Другие вопросы по тегам