Установите для внешнего ключа значение 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');
});