Php 在Laravel 5中的一对多关系中将外键设置为Null
我的问题与Laravel 5.6有关。我有Php 在Laravel 5中的一对多关系中将外键设置为Null,php,laravel-5,eloquent,foreign-keys,relationship,Php,Laravel 5,Eloquent,Foreign Keys,Relationship,我的问题与Laravel 5.6有关。我有Post和Category型号。它们具有一对多关系,在posts表中以category\u id作为外键。category\u id字段可为空 //Post Model class Post extends Model { public function category() { return $this->belongsTo('App\Category', 'category_id', 'id'); } } //
Post
和Category
型号。它们具有一对多关系,在posts
表中以category\u id
作为外键。category\u 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');
}
}
我的问题是,如果我删除一个类别。如何将posts
表中所有相关posts的category\u id
设置为空
我知道laravel提供了分离的方法,但我认为这是为了属于关系。下面有类似的东西吗
$category::find($id);
$category->posts()->dissociate(); //set all foreign key(category_id) to null in posts table
$category->delete();
您不想自己处理这个问题,让外键来处理它(如CD001所建议的):
我不是拉威尔的专家,但你不会在数据库里做这件事吗?使用外键删除SET NULL
键入内容…谢谢,这是一个非常好的建议,我将进一步研究。但我还是在用拉雷维尔的方式看。谢谢。同意这是更好的解决方案。我做了太多不必要的尝试。这就是我想做的,但是你的解决方案更好更干净<代码>$category=category::find($id)$posts=$category>posts();foreach($posts as$post){$post->category()->dissection();$post->save();}
Schema::create('posts', function (Blueprint $table) {
[...]
$table->foreign('category_id')->references('id')->on('categories')
->onDelete('set null');
});