Auth::user() 踩坑

Auth::user() 获得当前登录用户实例
本以为Auth::user()->where(‘money’,’>=’,’1’)->decrement(‘money’,$amount);是对当前登录用户的减少金额,结果会把数据库所有余额大于等于1的用户都执行一遍。
只能老老实实用where再判断一下id再进行操作

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 9

Auth::user() 返回的是当前登录的用户实例。根据你的描述,代码可以这么组织:

$user = Auth::user();
if($user->money >= 1){
     $user->money = $amount;
     $user->save();
}
1年前 评论

第一次见 Auth::user() 能像你这么用,Auth::user() 返回的要么是 Illuminate\Contracts\Auth\Authenticatable 要么是 null

绝对不可能返回一个 QueryBuilder,你这还能 where,大概率用的不是 Illuminate\Support\Facades\Auth 这个 Facade!

1年前 评论
lddtime 1年前
GeorgeKing (作者) 1年前

Auth::user() 返回的是当前登录的用户实例。根据你的描述,代码可以这么组织:

$user = Auth::user();
if($user->money >= 1){
     $user->money = $amount;
     $user->save();
}
1年前 评论

更新单行记录用orm吧,看你的写法是thinkphp

1年前 评论
nff93

看了下源码,在一个模型实例上调用 where 会走 newQuery ,这里只会添加之前的 withwithCount ,除此之外没有其它条件。

另外,我也是第一次见有人这么用。

1年前 评论

首先模型实例是可以直接 where 的,但是不会自动把模型的主键加入到查询条件中,,,我以前也因为这么想,这么写,搞过 bug,,,

1年前 评论

第一次见到这种写法 :joy:

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
1
粉丝
0
喜欢
0
收藏
0
排名:1973
访问:1010
私信
所有博文
社区赞助商