首页 > 解决方案 > Laravel 首次运行后不增加登录值

问题描述

每次用户登录时,我都试图在我的数据库中增加一列。如果我注册用户,它会成功地将计数设置为 0,当他们第一次登录时,计数会增加 1,但这就是它停止的地方。之后每次登录时,由于某种原因,该数字保持为 1。

我正在使用将字段添加到数据库中;

$table->integer('login_count')->default(0);

然后我的登录控制器看起来像这样;

public function login(LoginRequest $request): JsonResponse
{
    $data = $request->validated();

    if (!Auth::attempt($data)) {
        return response()->json(['message' => 'Invalid Credentials'], 401);
    }

    Auth::user()->update([
        'last_login' => now(),
        'login_count' => auth()->user()->increment('login_count'),
    ]);

    $token = auth()->user()->createToken('api')->plainTextToken;

    return response()->json([
        'access_token' => $token,
    ]);
}

奇怪的是 last_login 字段每次都会更新,但 login_count 从未超过 1。

我也试过auth()->user()->login_count++了,结果还是一样。

我想不通。

标签: phplaravel

解决方案


increment()方法不是向属性“添加+1”的助手,它是启动查询的查询构建器方法。意味着当你跑步时

auth()->user()->increment('login_count')

它运行一个查询,将 login_count 从 1 更改为 2。此方法返回 1,因为只有一条记录已更新。

然后Auth::user()->update()将 login_count 设置回 1(来自increment()返回值的值。

将您的代码更改为

Auth::user()->update([
        'last_login' => now(),
        'login_count' => auth()->user()->login_count + 1,
    ]);

推荐阅读