Для полиморфного отношения Laravel «многие ко многим», как вы указываете в миграции базы данных, что должно существовать ограничение базы данных, например, каскад вниз?
Так, например, у вас есть модель тегов, которая имеетотношения morphedByMany с продуктами и модель продукта, которая имеет отношения morphToMany с тегами.Затем, имея полиморфную сводную таблицу, как вы можете удалить сопоставление в сводной таблице в случае, если продукт и / или тег удалены.
Существует таблица тегов и таблица taggables, которая является сводной таблицей, котораясопоставляет тег с 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();
}
Миграция базы данных taggables
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();
});