Что я делаю не так с запросами SQL в LARAVEL?

164
25 декабря 2018, 16:00

Собственно, вот моя функция контроля флуда.

public function StopFlud($user)
{
    $search_user =\DB::table('stop_flud') 
                ->where('User_id', $user)->first(); // Ищем пользователя в базе
                if(empty($search_user)) // Если пользователя нет в базе, то создаём строку с временем его последней ставки
                {
                 \DB::table('stop_flud')->insertGetId(['User_id' => $user, 'last_date' => time()]);
                }
                else { // Иначе просто подгружаем ему время последней ставки
                if((time()-$search_user->last_date) < 2) // Если прошло меньше 2 секунд c момента его последней ставки, то FALSE
                {
                    return 'false';
                }
                else 
                {
                \DB::table('stop_flud')
                ->where('User_id', $user)
                ->update(['last_date' => time()]);
                    return 'true';
                }
                }
}

В итоге, функция не работает. Что я делаю не так? два часа уже над ней сижу

Answer 1

Для ограничения используйте встроенный middleware - trottle. Таким образом можно ограничить количество запросов в заданное время к определённому роуту. При этом ограничение работает для каждого отдельного юзера.

Пример из документации

For example, let's specify that an authenticated user may access the following group of routes 60 times per minute:

Route::middleware('auth:api', 'throttle:60,1')->group(function () {
    Route::get('/user', function () {
        //
    });
});

К роуту применяется два middleware, один из которых - количество запросов в минуту. В данном случае не более 60 в минуту.

В вашем случае примерно так (если группа роутов)

Route::middleware('throttle:1,0.03')->group(function () {
    Route::post('/action', 'IndexController@action');
});

Или так, если только один

Route::post('/action', 'IndexController@action')->middleware('throttle:1,0.03');
READ ALSO
Несколько sql запросов

Несколько sql запросов

Всем ПриветВопрос может и банальный но решения пока не нашел

150
Как связать 2 таблицы список пользователей и список видео

Как связать 2 таблицы список пользователей и список видео

В одной таблице список пользователей (поля: id, логин, пароль, права), а вторая это таблица с видеоТо есть будет штук 10 видео и у разных пользователей...

239
google tests C++

google tests C++

Решил попробовать гугл тесты в vs2017При запуске тесты выскакивает такие ошибки :

176