亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Laravel - 我的雙重提交解決方案有效嗎

Laravel - 我的雙重提交解決方案有效嗎

PHP
瀟瀟雨雨 2023-10-21 10:10:39
這是我的第一個問題,所以請放輕松。我使用 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 代碼來禁用該按鈕,以防萬一??蛻粜枰环N后端解決方案,而不是客戶端解決方案。但不妨補充一點,因為我有點解決了這個問題(有點)。

查看完整回答
反對 回復 2023-10-21
  • 1 回答
  • 0 關注
  • 154 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號