Php 对于laravel多态多个关系,如何添加数据库约束?
对于Laravel的多态多对多关系,如何在数据库迁移中指定数据库约束应该存在,例如,级联 例如,您有一个与产品具有morphedByMany关系的标记模型和一个与标记具有morphedByMany关系的产品模型。如果有一个多态透视表,那么在删除产品和/或标记的情况下,如何删除透视表中的映射 有一个tags表和一个taggables表,taggables表是将标记映射到taggable_类型和taggable_id的透视表 来自产品模型的代码片段Php 对于laravel多态多个关系,如何添加数据库约束?,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,对于Laravel的多态多对多关系,如何在数据库迁移中指定数据库约束应该存在,例如,级联 例如,您有一个与产品具有morphedByMany关系的标记模型和一个与标记具有morphedByMany关系的产品模型。如果有一个多态透视表,那么在删除产品和/或标记的情况下,如何删除透视表中的映射 有一个tags表和一个taggables表,taggables表是将标记映射到taggable_类型和taggable_id的透视表 来自产品模型的代码片段 /** * Tag relation
/**
* 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();
});
不确定如何通过数据库约束实现这一点,但您能否不使用覆盖模型的引导方法?例如,在您的产品模型中包括:
protected static function boot()
{
parent::boot();
static::deleting(function ($product) {
$product->tags()->detach();
});
}
这意味着每当您的产品被删除时,所有相关的标签也将被删除。可能的重复项