更新Laravel ManyToMany关系而不删除(或分离)

时间:2015-01-25 17:49:40

标签: php laravel laravel-4 eloquent

目标 - 更新多对多关系但不删除行

假设,用户&角色模型具有多对多关系。特定$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越来越大,性能越来越低。

有人可以告诉我这方面的最佳做法吗?

1 个答案:

答案 0 :(得分:3)

我不担心在数据透视表中删除和添加记录 关于ID的大小,maximum value of an unsigned INT in MySQL 4'294'967'295 。我不相信你会很快达成目标。如果你仍然担心,你可以:

  1. 使用未签名的BIGINT(最大18446744073709551615)
  2. 只需完全删除ID,透视表中通常不需要它。