Auth::user() 踩坑

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

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 9

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

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

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年前
nff93

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

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

1年前 评论

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

1年前 评论

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

1年前 评论

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

1年前 评论

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