這是我的第一個(gè)問題,所以請放輕松。我使用 Laravel 一段時(shí)間了;然而,最近我在測試客戶端應(yīng)用程序時(shí)遇到了一個(gè)問題。問題是,如果用戶雙重提交或簡單地單擊提交按鈕 x 次,那么相同的記錄將在數(shù)據(jù)庫中創(chuàng)建 x 次。我以前從未遇到過這個(gè)問題,因?yàn)楹唵蔚奈ㄒ或?yàn)證就可以實(shí)現(xiàn)這一點(diǎn)。然而,這種形式(或確切的模型)允許具有相同值/重復(fù)項(xiàng)的數(shù)據(jù)(客戶端應(yīng)用程序要求)。所以我做的第一件事如下: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(); ....}現(xiàn)在,經(jīng)過測試,效果很好。但是,我的問題是,是否有任何內(nèi)置解決方案、軟件包或更好的解決方案?另外,我應(yīng)該做一個(gè)會話解決方案以獲得更快的響應(yīng) - 因?yàn)椋绻义e(cuò)了,請糾正我,但如果它位于具有 > 500k 記錄的表上,這不會很慢嗎?編輯:我考慮過為此制作一個(gè)自定義節(jié)流中間件,但這會是一個(gè)壞主意,你覺得怎么樣?另外,正如 @nice_dev 提到的,用戶越多,就會出現(xiàn)雙重情況,所以我考慮在記錄表中添加 user_id 字段并獲取當(dāng)前用戶創(chuàng)建的最后一條記錄,但我仍然認(rèn)為這是一個(gè)糟糕的解決方案。不幸的是,Javascript 解決方案不會解決這個(gè)問題編輯:我所說的 Javascript 解決方案的意思是,一旦單擊按鈕,就會禁用它類型的解決方案(任何客戶端解決方案)。順便說一句,客戶端應(yīng)用程序最終每個(gè)表將擁有超過 500k 條記錄(至少在第一年左右)。請隨意修改我的問題......就像我說我是新來的!
1 回答

繁華開滿天機(jī)
TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超4個(gè)贊
因?yàn)?,我的情況有點(diǎn)獨(dú)特,所以我采用了相同的解決方案,但在記錄表(FK)上添加了 user_id 列。并檢查同一用戶在過去x分鐘內(nèi)是否創(chuàng)建了相同的記錄(因?yàn)榭蛻舳讼胍貜?fù)的記錄但不允許用戶出錯(cuò))。
盡管如此,我還是添加了一段 JavaScript 代碼來禁用該按鈕,以防萬一??蛻粜枰环N后端解決方案,而不是客戶端解決方案。但不妨補(bǔ)充一點(diǎn),因?yàn)槲矣悬c(diǎn)解決了這個(gè)問題(有點(diǎn))。
- 1 回答
- 0 關(guān)注
- 146 瀏覽
添加回答
舉報(bào)
0/150
提交
取消