Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 对于laravel多态多个关系,如何添加数据库约束?_Php_Mysql_Laravel_Eloquent - Fatal编程技术网

Php 对于laravel多态多个关系,如何添加数据库约束?

Php 对于laravel多态多个关系,如何添加数据库约束?,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,对于Laravel的多态多对多关系,如何在数据库迁移中指定数据库约束应该存在,例如,级联 例如,您有一个与产品具有morphedByMany关系的标记模型和一个与标记具有morphedByMany关系的产品模型。如果有一个多态透视表,那么在删除产品和/或标记的情况下,如何删除透视表中的映射 有一个tags表和一个taggables表,taggables表是将标记映射到taggable_类型和taggable_id的透视表 来自产品模型的代码片段 /** * Tag relation

对于Laravel的多态多对多关系,如何在数据库迁移中指定数据库约束应该存在,例如,级联

例如,您有一个与产品具有morphedByMany关系的标记模型和一个与标记具有morphedByMany关系的产品模型。如果有一个多态透视表,那么在删除产品和/或标记的情况下,如何删除透视表中的映射

有一个tags表和一个taggables表,taggables表是将标记映射到taggable_类型和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();
    });

不确定如何通过数据库约束实现这一点,但您能否不使用覆盖模型的引导方法?例如,在您的产品模型中包括:

protected static function boot()
{
    parent::boot();

    static::deleting(function ($product) {
        $product->tags()->detach();
    });
}
这意味着每当您的产品被删除时,所有相关的标签也将被删除。

可能的重复项