php - 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++
了,结果还是一样。
我想不通。
解决方案
该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,
]);
推荐阅读
- vue.js - 在 VUE.js 中访问孙子的属性
- spring - 应该设置什么状态来返回 HttpStatus 中实体的验证错误
- angular - Angular - 使用可编辑配置文件中的值为 serviceURL 定义 DI 令牌
- swift - 为什么在 SwiftUI 中单击空白区域后会调用 onTapGesture?
- arrays - 如何将直接值分配给 C 中动态创建的二维数组?
- java - 为什么在其父类中未定义子类构造函数?
- angular - 如何在结构指令中传递输入变量?
- google-apps-marketplace - 为现有用户重新发布APP的行为
- javascript - 如何将 hello 组件放在导航栏下?粒子占据整个屏幕
- arrays - 转义闭包在解码 JSON Swift 时捕获变异的“self”参数