级联删除laravel上的多对多关系

时间:2019-03-17 12:40:08

标签: laravel many-to-many

我使用了很多对很多关系。我有三个表,分别是:product,tag,productstag。在这里,我希望每当我要删除产品时,它也将删除它与productstag表上的关系。

adb install apk

如您所见,我已经使用product_id和tag_id作为主键。 所以我不能用这个

public function up()
{
    Schema::create('productstags', function (Blueprint $table) {
        $table->integer('product_id');
        $table->integer('tag_id');
        $table->primary(['product_id','tag_id']);
        $table->timestamps();
    });
}

那还有什么选择?

关于我的产品型号

$table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');
$table->foreign('tag_id')->references('id')->on('products')->onDelete('cascade');

在我的标签模型上:

 public function tags()
{
    return $this->belongsToMany('App\Tag','productstags','product_id','tag_id')->withTimestamps();


}

关于我的产品销毁功能:

public function products()
{
    return $this->belongsToMany('App\Product','Productstags','tag_id','product_id');

}

1 个答案:

答案 0 :(得分:0)

它不如cascade漂亮,但是您可以覆盖delete方法并执行以下操作:

public function delete(){
    $this->name_of_the_relationship()->delete();
    return parent::delete();
}