Laravel中如何获取创建新用户的用户ID并存入supervised_by字段
实现创建新用户时自动存入创建者ID到supervised_by字段
我有一个users数据表,其中包含supervised_by字段,希望将创建新用户的用户ID存入该字段。例如:当管理员创建用户时,将管理员的ID存入该新用户的supervised_by字段中。
修正迁移文件
原迁移文件中supervised_by字段的定义存在格式问题,需调整为支持外键约束的正确写法,同时允许字段为null(系统首个用户如超级管理员无创建者):
public function up() { Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->boolean('verified')->default(false); $table->timestamp('verified_at')->nullable(); $table->string('password'); $table->string('is_verified'); $table->boolean('active')->nullable(); // 修正字段类型与外键约束 $table->unsignedBigInteger('supervised_by')->nullable(); $table->foreign('supervised_by')->references('id')->on('users'); $table->rememberToken(); $table->timestamps(); $table->softDeletes(); }); }
修改User控制器代码
在创建新用户的逻辑中,获取当前登录用户(即创建者)的ID,直接存入supervised_by字段:
public function register(Request $request) { $validator = Validator::make($request->all(), [ 'name' => 'required|max:180', 'email' => 'required|email|unique:users', 'password' => 'required|max:15|min:8', // 根据业务需求决定是否开启role字段验证 // 'role' => 'required' ]); if ($validator->fails()) { return response()->json([ 'validation_errors' => $validator->messages(), ]); } $user = User::create([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->password), // 注意:密码必须加密存储 'verified' => false, 'role' => $request->role, 'supervised_by' => auth()->id() // 存入当前登录用户的ID ]); return response()->json([ 'status' => 200, 'code' => 'register', 'message' => '注册成功!待审核通过后即可登录。', 'data' => null, 'error' => null, ]); }
关键提醒
- 需确保该接口仅允许已登录用户访问,可通过
auth:api或web中间件限制未登录请求。 - 原代码中直接存储明文密码存在安全风险,必须通过
Hash::make()加密后再存入数据库。
内容的提问来源于stack exchange,提问作者Zenis
相关产品推荐
相关产品推荐

