多对多关联的删除问题

目前表exams,users,以及中间表exam_user,中间表字段exam_id,user_id,seq   

一般需求下的关联删除可以通过$exam->users()->detach($user_id)实现,但是这样的话会把所有seq都删除,有没有办法只删除某个seq的关联关系哪

code海老白鱼
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
Epona
最佳答案
$exams = $user->exams()->wherePivot('seq', 2)->detach($userId);

类似这样呢

5年前 评论
讨论数量: 11
Epona

$user->exams()->detach($examId)呢, examId为你返回的符合规则的examid

另外不太清楚你的 seq 是什么规则

5年前 评论

@Epona 可是这样的话,会把user_id=$userId exam_id=$examId的所有的seq关联数据都删除掉啊

5年前 评论

@Epona seq就是一个记录关联顺序的字段

5年前 评论
Epona

@螺掷翔 应该把符合seq规则的examid 找到,然后再detach就可以?

5年前 评论

@Epona 是这样的,seq字段跟exam表没有关系,在exam_user这个中间表中表示exam跟user的关联顺序,exam_id、user_id、seq是中间表的复合主键;

5年前 评论
Epona

@螺掷翔有没有办法只删除某个 seq 的关联关系哪 这句是什么意思?是只删除 seq 字段?

5年前 评论

@Epona 比如中间表有这样一些数据,我想删除 exam_id = 1, user_id=1, seq=2这条数据

exam_id user_id seq
1 1 1
1 1 2
1 1 3
2 1 1
2 1 2
2 1 3
5年前 评论
Epona
$exams = $user->exams()->wherePivot('seq', 2)->detach($userId);

类似这样呢

5年前 评论

@Epona 这个可行啊!没好好看文档

5年前 评论
Epona

@螺掷翔 多看看就好了:smile:

5年前 评论

@Epona :ok_hand:找个机会再重新看一遍

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!