多个子模型的sync()方法多对多

时间:2016-05-26 19:58:33

标签: laravel laravel-5 laravel-5.2

我有两个子模型CategoryTag,它扩展了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_typecategorizables,而不是使用单个taggables数据透视表。但如果我决定创建另一组Term的子模型,它将使我的数据库充满数据透视表。

如何在不分离数据透视表的情况下使其工作的任何解决方案?

0 个答案:

没有答案