按ID删除/更新laravel pivot表条目

时间:2018-04-12 20:18:04

标签: php laravel pivot-table

我有一个如下数据库结构,其中项目A与B有多对多的关系。

这是多对多的,所以:

项目X(表A中的对象)多次涉及Y(B中的对象)。

使用laravel attach()功能可以轻松添加这些记录。但是,我需要更新和删除这些项目。

detach()sync()方法似乎不合适。它们假设一条记录与另一条记录之间只有一个数据透视表条目。

如果我detach(),则删除所有项目。那不是我想要的。

所以我的问题的要点是:

如果我拥有数据透视表记录的ID,如何删除/更新它... ,因为分离没有按预期工作。

或换句话说:

如何直接与数据透视表对象进行交互?

2 个答案:

答案 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();