对于Laravel多态多对多关系,您如何添加数据库约束?
对于Laravel多态多对多关系,您如何添加数据库约束?
对于Laravel的多态多对多关系,如何在数据库迁移中指定存在一个数据库约束,例如级联删除?例如,您有一个Tag模型,它与Products具有多态多对多关系,而Product模型与tags具有多态多对多关系。然后,如何在多态中的中间表中删除映射,以防删除产品和/或标签。有一个标签表和一个taggables表,它是将标签映射到taggable_type和taggable_id的中间表。
Product模型的片段:
/** * 标签关联 * * @var $query */ public function tags(){ return $this->morphToMany(Tag::class, 'taggable')->withTimestamps(); } /** * 标签关联 * * @var $query */ public function tag($tag){ return $this->tags()->attach($tag); }
Tag模型的片段:
/** * 产品关联 * * @var $query */ public function products(){ return $this->morphedByMany(Product::class, 'taggable')->withTimestamps(); }
taggables数据库迁移:
Schema::create('taggables', function (Blueprint $table) { $table->primary(['tag_id', 'taggable_id', 'taggable_type']); //这是为了避免重复关系 $table->unsignedInteger('tag_id'); $table->unsignedInteger('taggable_id'); $table->string('taggable_type'); $table->timestamps(); });