这是我的第一个问题,所以请放轻松。我使用 Laravel 一段时间了;然而,最近我在测试客户端应用程序时遇到了一个问题。问题是,如果用户双重提交或简单地单击提交按钮 x 次,那么相同的记录将在数据库中创建 x 次。我以前从未遇到过这个问题,因为简单的唯一验证就可以实现这一点。然而,这种形式(或确切的模型)允许具有相同值/重复项的数据(客户端应用程序要求)。所以我做的第一件事如下:public function store(CustomRequest $request){ if($lastEntry = Record::latest()->first()){ if( ($request->name == $lastEntry->name) && ($request->another == $lastEntry->another) // && ($request->user()->id == $lastEntry->user_id) // Current user check (need to modify the $lastEntry for it to work efficiently!) && (now()->diffInMinutes($lastEntry->created_at) < 5) // I added this later as another way to allow duplicates records after each other if they were created 5m apart ){ return redirect() ->route('show.record', $lastEntry->id) ->with('success', 'Record has been created successfully.'); } } $record= new Record(); ....}现在,经过测试,效果很好。但是,我的问题是,是否有任何内置解决方案、软件包或更好的解决方案?另外,我应该做一个会话解决方案以获得更快的响应 - 因为,如果我错了,请纠正我,但如果它位于具有 > 500k 记录的表上,这不会很慢吗?编辑:我考虑过为此制作一个自定义节流中间件,但这会是一个坏主意,你觉得怎么样?另外,正如 @nice_dev 提到的,用户越多,就会出现双重情况,所以我考虑在记录表中添加 user_id 字段并获取当前用户创建的最后一条记录,但我仍然认为这是一个糟糕的解决方案。不幸的是,Javascript 解决方案不会解决这个问题编辑:我所说的 Javascript 解决方案的意思是,一旦单击按钮,就会禁用它类型的解决方案(任何客户端解决方案)。顺便说一句,客户端应用程序最终每个表将拥有超过 500k 条记录(至少在第一年左右)。请随意修改我的问题......就像我说我是新来的!
1 回答
繁华开满天机
TA贡献1816条经验 获得超4个赞
因为,我的情况有点独特,所以我采用了相同的解决方案,但在记录表(FK)上添加了 user_id 列。并检查同一用户在过去x分钟内是否创建了相同的记录(因为客户端想要重复的记录但不允许用户出错)。
尽管如此,我还是添加了一段 JavaScript 代码来禁用该按钮,以防万一。客户需要一种后端解决方案,而不是客户端解决方案。但不妨补充一点,因为我有点解决了这个问题(有点)。
- 1 回答
- 0 关注
- 105 浏览
添加回答
举报
0/150
提交
取消