You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 09:37:35