目标 - 更新多对多关系但不删除行
假设,用户&角色模型具有多对多关系。特定$user
有三个角色 - [1,2,3] 。 表示此$user
的数据透视表中有三行。
现在,我想更新关系。我现在想要的角色是[1,2,4]。我不想删除数据透视表上的行(因为这会导致数据透视表的ID出现间隙)。如果我使用sync([1,2,4])
,则会删除与角色' 3'相对应的行。如果我使用sync([1,2,4],false)
,则会使该行保留角色' 3'。我想要角色' 3'要更新到' 4'没有任何删除。如何实现这一目标?
我知道detach()
函数但会再次删除行。
编辑:问题的起源
如果我在User
&之间有多对多的关系Role
模型&通常,用户的角色会不断变化。所以,更好地保持分离旧角色&附加新角色?或者,我应该更新数据透视表现有行的role_id
而不删除/删除现有行?
我很担心这个,因为如果我删除一行&添加另一个,'id'
增加&之前的'id'
代替了一个空白。 如果我有数百万用户&成千上万的角色,不会是#id; id。'变得越大会对我造成问题?
如果超过整数限制,我知道它不会超过bigInt限制(最有可能)。没关系。但我在某处读到,随着ID越来越大,性能越来越低。
有人可以告诉我这方面的最佳做法吗?
答案 0 :(得分:3)
我不担心在数据透视表中删除和添加记录 关于ID的大小,maximum value of an unsigned INT in MySQL 4'294'967'295 。我不相信你会很快达成目标。如果你仍然担心,你可以: