Laravel:不允许多个用户更新同一数据库记录

时间:2018-12-18 10:16:18

标签: laravel vue.js eloquent

在Laravel中,有什么方法可以与用户锁定特定记录,并且不允许其他用户编辑同一记录。

例如,用户A编辑记录R1。该记录将锁定其他用户。同时,如果任何其他用户尝试编辑记录R1,则它会在前端显示错误消息“用户A当前正在编辑此记录”。并且不允许更新记录。

2 个答案:

答案 0 :(得分:0)

我认为您不是指在用户保存您没有不一致之处的那一刻表被锁定的事务。

我认为您必须在数据库in_use中创建一个字段。当用户打开编辑表单时,您在该字段中写入用户ID并锁定表单。当下一个用户输入表单时,您会写一条消息,表示用户XY正在编辑记录。但是,如果用户离开表格/记录,那么您就必须看看您是否可以解锁记录。

也许这样的事情可能会有所帮助:

https://packagist.org/packages/tokenly/laravel-record-lock

答案 1 :(得分:0)

默认情况下,当一个查询更新一条记录并且队列中进行其他查询以等待当前查询首先完成时,MySQL会锁定数据库。

因此,基本上两个用户无法同时更新同一记录。这是不可能的。

但是,如果您要表示的是用户开始编辑表单之类的东西,那一刻您要锁定数据库中表单的所有字段,以便其他用户甚至在第一个用户停止编辑之前都无法访问该表单然后您可以选择斯托尼的答案。只需在表格中的字段中填充当前正在编辑表单的用户的ID,这样便可以检查是否:

  • 某些用户正在通过检查字段是否为空来编辑表单
  • 还可以根据id获取用户并显示正在编辑表单的消息

我建议您使字段可以为空并且可以使用外键,以便您可以使用雄辩的关系轻松地获取用户。