Laravel UserObserver创建第二个用户时返回首个用户数据的原因排查求助
UserObserver创建第二个用户时返回第一个用户ID的问题解决
问题背景
我在使用Laravel的UserObserver时碰到一个奇怪的问题:创建第一个用户时运行正常,但创建第二个用户时,created方法返回的却是第一个用户的ID。数据库层面是正常的,新注册用户的ID已经被正确分配为下一个序号,我的UserObserver代码如下:
class UserObserver { /** * Handle the User "created" event. * * @param \App\Models\User $user * @return void */ public function created(User $user) { dd($user->first()->id); } }
问题原因
问题出在你调用的$user->first()->id这行代码上!
其实created方法传入的$user参数,本身就是刚刚创建完成的那个新用户的实例,它已经包含了这个新用户的所有属性,包括正确的ID。但你调用->first()方法时,相当于触发了一个全新的查询:从users表中获取第一条数据(也就是ID最小的那个用户,也就是你创建的第一个用户)。所以不管你创建多少个新用户,这行代码都会返回第一个用户的ID,完全偏离了你的需求。
修复方法
你只需要直接使用传入的$user实例的ID就可以了,不需要额外调用first()方法:
class UserObserver { /** * Handle the User "created" event. * * @param \App\Models\User $user * @return void */ public function created(User $user) { dd($user->id); // 直接访问当前新创建用户的ID } }
修改之后,每次创建新用户时,dd输出的都会是刚创建的这个用户的正确ID,和数据库里的记录完全匹配。
内容的提问来源于stack exchange,提问作者G47
相关产品推荐
相关产品推荐

