多对多关联的删除问题

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

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

code海老白鱼
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
Epona
最佳答案
$exams = $user->exams()->wherePivot('seq', 2)->detach($userId);

类似这样呢

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

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

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

4年前 评论

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

4年前 评论

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

4年前 评论
Epona

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

4年前 评论

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

4年前 评论
Epona

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

4年前 评论

@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
4年前 评论
Epona
$exams = $user->exams()->wherePivot('seq', 2)->detach($userId);

类似这样呢

4年前 评论

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

4年前 评论
Epona

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

4年前 评论

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

4年前 评论

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