【发布时间】:2015-01-26 03:21:39
【问题描述】:
目标 - 更新多对多关系但不删除行
假设,用户和角色模型具有多对多关系。一个特定的$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”变大不会给我带来麻烦吗?
如果它超过整数限制,我知道它不会超过 bigInt 限制(很可能)。没关系。但我在某处读到,随着 ID 变大,性能会变低。
有人可以告诉我这方面的最佳做法吗?
【问题讨论】:
-
我认为您不应该真正担心数据透视表中的 ID。这种担忧背后的原因是什么?
-
@lukasgeiter 如果它们变得太大并在以后出现性能问题怎么办?如果某个时候(不是在不久的将来)它们超过整数限制怎么办?我只是想知道它的最佳实践。
标签: php laravel laravel-4 eloquent