Установите для внешнего ключа значение «ноль в отношениях один-ко-многим» в Laravel 5 - PullRequest
0 голосов
/ 12 сентября 2018

Мой вопрос связан с Laravel 5.6. У меня есть Post и Category модели. Они имеют отношение один-ко-многим, с category_id в качестве внешнего ключа в таблице posts. Поле category_id имеет значение NULL

//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 Ответ

0 голосов
/ 12 сентября 2018

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

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