为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
幕布斯7119047 2022-01-24 10:25:07
对于 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();    });
查看完整描述

1 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

不知道如何通过数据库约束来实现这一点,但你能不能利用覆盖模型的引导方法?例如将其包含在您的产品模型中:


protected static function boot()

{

    parent::boot();


    static::deleting(function ($product) {

        $product->tags()->detach();

    });

}

这意味着每当您的产品被删除时,所有相关标签也将被删除。


查看完整回答
反对 回复 2022-01-24
  • 1 回答
  • 0 关注
  • 175 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号