php - 在 Laravel 5 中的一对多关系中将外键设置为 Null
问题描述
我的问题与 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');
}
}
我的问题是,如果我删除一个类别。如何将tablecategory_id
中的所有关联帖子设置为 null ?posts
我知道 laravel 提供dissociate
方法,但我认为这是为了belongsTo
关系。有没有类似下面的东西?
$category::find($id);
$category->posts()->dissociate(); //set all foreign key(category_id) to null in posts table
$category->delete();
解决方案
您不想自己处理这个问题,让外键处理它(如 CD001 建议的那样):
Schema::create('posts', function (Blueprint $table) {
[...]
$table->foreign('category_id')->references('id')->on('categories')
->onDelete('set null');
});
推荐阅读
- java - spring bean 配置中的微流 EmbeddedStorageManager
- c# - 如何将字符串包含在另一个字符串中
- python - 无法升级我的自定义模块“事件”-Odoo 14
- ruby-on-rails - before_action 回调在运行集成测试用例 rails 时不执行
- android - 是否可以为自定义视图创建建议?
- google-apps-script - 用输入参数 URL 替换链接中的文本
- oracle - 插入员工的 PLSQL 过程:ORA-00984
- android - 在 ListView 中使用带有简单适配器的过滤器
- python - 将一个列表插入到另一个列表中,每个元素都有索引
- asp.net - 如何在asp轮播循环中添加活动类