назвал last_seen (когда был последний раз).
Создал отдельный мидл, который вставил везде, после мидла auth. То есть для всех аутентифицированных пользователей.
При каждом реквесте срабатывал этот мидл и обновлял мне дату в этом поле.
Однако, при каждом обновлении этого атрибута (last_seen) конечно же обновляется и поле updated_at все той же таблицы User. (что, в общем-то довльно предсказуемо)
Ну а раз обновление все равно происходит, то я поле last_seen полностью выкинул и тупо обновляю поле updated_at при каждом запросе.
Знаю, что это тяжелое решение, ведь на каждый реквест летит запрос в БД, а также, возможно не по феншую обновлять метку updated_at, оно вроде как для другого логически. Но тем не менее:
<?php
namespace App\Http\Middleware;
use Auth;
use Closure;
class LastSeen
{
public function handle($request, Closure $next)
{
if (!Auth::check()) {
return $next($request);
}
$user = $request->user();
$user->touch();
return $next($request);
}
}
проверку
if (!Auth::check()) {
return $next($request);
}
в принципе, можно выкинуть, если ставить мидл за мидлом auth
'middleware' => ['auth', 'seen', 'active'],
Очень жду критику
Можно указывать при обновлении чтобы таймшьампы не обновляло
и хоть рецепт тяжелый для БД, но зато время последнего посещения очень точное )))
Обсуждают сегодня