我有一个如下数据库结构,其中项目A与B有多对多的关系。
这是多对多的,所以:
项目X(表A中的对象)多次涉及Y(B中的对象)。
使用laravel attach()
功能可以轻松添加这些记录。但是,我需要更新和删除这些项目。
detach()
和sync()
方法似乎不合适。它们假设一条记录与另一条记录之间只有一个数据透视表条目。
如果我detach()
,则删除所有项目。那不是我想要的。
所以我的问题的要点是:
如果我拥有数据透视表记录的ID,如何删除/更新它... ,因为分离没有按预期工作。
或换句话说:
如何直接与数据透视表对象进行交互?
答案 0 :(得分:1)
您可以使用newPivotQuery()
。
类似的东西:
Parent::relation()->newPivotQuery()->where('id', $someId)->delete();
where()
和delete()
语句将应用于透视查询。
答案 1 :(得分:0)
感谢所有人,
如果您有子对象可用,@ devk已经指出了一个很好的解决方案。我已经赞成这个答案,因为它对未来的参考是真实有用的。
不幸的是,在这个特定的点上我只有多对多的ID,所以我用" No来回答这个问题 - 没有特定的方法可以通过id"来访问数据透视表。使用Pivot
或类似对象。
但是:要明确,这仍然可以使用DB类以雄辩的方式完成。
DB::table('many-to-many-lookup')
->where('id', $id)
->take(1)
->delete();