【发布时间】:2019-05-18 17:45:39
【问题描述】:
在 Laravel 中是否有任何方法可以锁定用户的特定记录,并且不允许其他用户编辑同一记录。
例如,用户 A 编辑记录 R1。该记录将为其他用户锁定。同时,如果任何其他用户尝试编辑记录 R1,则会在前端显示错误消息“用户 A 当前正在编辑此记录”。并且不允许更新记录。
【问题讨论】:
在 Laravel 中是否有任何方法可以锁定用户的特定记录,并且不允许其他用户编辑同一记录。
例如,用户 A 编辑记录 R1。该记录将为其他用户锁定。同时,如果任何其他用户尝试编辑记录 R1,则会在前端显示错误消息“用户 A 当前正在编辑此记录”。并且不允许更新记录。
【问题讨论】:
我认为您并不是指在用户保存您没有不一致的内容的那一刻表被锁定的事务。
我认为在您的情况下,您必须在数据库中创建一个字段in_use。当用户打开编辑表单时,您在该字段中写入用户 ID 并锁定表单。当下一个用户输入表单时,您会写一条消息,说明用户 XY 目前正在编辑记录。但是,如果用户离开表单/记录,您必须查看您是否解锁了记录。
也许这样的事情会有所帮助:
【讨论】:
默认情况下,当一个查询更新记录并且其他查询在队列中进行时,MySQL 会锁定数据库以等待当前查询首先完成。
所以基本上两个用户不能同时更新同一个记录。这是不可能的。
但是,如果您的意思是当用户开始编辑表单或其他内容时,您希望在那一刻锁定数据库中表单的所有字段,以便当其他用户甚至无法访问表单时,直到第一个用户停止编辑然后你就可以接受 Stony 的回答了。只需在表格中有一个字段填充当前正在编辑表单的用户的 id,这样您就可以检查是否:
我建议您将字段设置为可空和外键,以便您可以使用雄辩的关系轻松获取用户。
【讨论】: