Auth::user() 踩坑

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

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 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
排名:1977
访问:1010
私信
所有博文
社区赞助商