对于 Laravel 的多态多对多关系,如何在数据库迁移中指定一个数据库约束应该存在,例如向下级联?
例如,您有一个与 Products 具有 morphedByMany 关系的 Tag 模型和一个与标签具有 morphToMany 关系的 Product 模型。然后有一个多态数据透视表,如果产品和/或标签被删除,如何删除数据透视表中的映射。
有一个标签表和一个可标记表,它是将标签映射到 taggable_type 和 taggable_id 的数据透视表。
产品模型的片段
/**
* Tag relation
*
* @var $query
*/
public function tags(){
return $this->morphToMany(Tag::class, 'taggable')->withTimestamps();
}
/**
* Tag relation
*
* @var $query
*/
public function tag($tag){
return $this->tags()->attach($tag);
}
来自标签模型的片段
/**
* Product relation
*
* @var $query
*/
public function products(){
return $this->morphedByMany(Product::class, 'taggable')->withTimestamps();
}
可标记数据库迁移
Schema::create('taggables', function (Blueprint $table) {
$table->primary(['tag_id', 'taggable_id', 'taggable_type']); //This is to avoid duplicate relationships
$table->unsignedInteger('tag_id');
$table->unsignedInteger('taggable_id');
$table->string('taggable_type');
$table->timestamps();
});
慕斯王