我有两个子模型Category
和Tag
,它扩展了Term
模型。两个子模型与具有数据透视表Post
的{{1}}模型具有多对多的多态关系。
termables
在一起更新类别和标签时,更新类别时删除了标记,或者在更新标记时删除了类别
看起来Laravel不会先检查// Post.php
class Post extends Model
{
public function categories()
{
return $this->morphToMany(Category::class, 'termable', 'termables', 'termable_id', 'term_id');
}
public function tags()
{
return $this->morphToMany(Tag::class, 'termable', 'termables', 'termable_id', 'term_id');
}
}
// Term.php
class Term extends Model
{
}
// Category.php
class Category extends Term
{
protected static function boot()
{
parent::boot();
static::addGlobalScope(new TypeScope('category'));
}
public function posts()
{
return $this->morphedByMany(Post::class, 'termable', 'termables', 'term_id', 'termable_id')
}
}
// Tag.php
class Tag extends Term
{
protected static function boot()
{
parent::boot();
static::addGlobalScope(new TypeScope('tag'));
}
public function posts()
{
return $this->morphedByMany(Post::class, 'termable', 'termables', 'term_id', 'termable_id')
}
}
在删除之前我实际声明的term_id模型是什么,只需按$this->morphToMany(Category::class, 'termable', 'termables', 'termable_id', 'term_id');
删除所有内容。
可能有效的解决方案是将每个子模型的数据透视表分成termable_type
和categorizables
,而不是使用单个taggables
数据透视表。但如果我决定创建另一组Term的子模型,它将使我的数据库充满数据透视表。
如何在不分离数据透视表的情况下使其工作的任何解决方案?