如何根据数据透视表信息删除多对多关系

时间:2017-08-29 17:06:01

标签: php laravel laravel-5

我需要根据存储在其中的信息从我的数据透视表中分离记录。

所以我有三个表,1)活动2)activity_submissions 3)提交

一个活动可以有很多提交,一个提交可以有很多活动,它们共享多对多的关系。现在有一个问题:activity_submissions表中也有一个描述列。

这是activity_submissions表:

id | activity_id | submission_id | desription

所以我有三条记录如下:

1 | 20 | 1 | "First"
2 | 20 | 1 | "Second"
3 | 20 | 1 | "Third"

我只想把描述为“第三”的那个放回去。

我尝试使用分离,但这会删除所有这些:

$activity=\App\Activity::find(20);
$submissions=$activity->submissions()->where('submission_id','=','1')->get();
for($i=0; $i<$submissions->count(); $i++){
    if ($submissions[$i]->pivot->description == "Third"){
       $submissions[$i]->activities()->detach();
    }
}

但是这段代码将我的所有记录分开,我将如何进行此操作?我正在使用Laravel 5.0。

1 个答案:

答案 0 :(得分:0)

您可以使用->wherePivot()功能过滤掉数据透视表。

$submissions[$i]->activities()->wherePivot('description', '=', $yourVal)->detach();

在您的情况下$yourVal = "Third";