用户在laravel中注册后如何将用户添加到另一个表?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (60)

我正在Laravel 5.6中开发一个电子商务项目,其中我有两个用户表:

  1. 用户密码和其他一些东西和
  2. UserDetails表用于存储用户地址,电话,城市,密码等。

Users表中注册存储凭据的用户时,我想在UserDetails表中创建一个列,该列具有在添加到Users表时生成的相同user_id 。

以下是我的迁移:

Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');
            $table->timestamp('email_verified_at')->nullable();
            $table->rememberToken();
            $table->timestamps();
        });


Schema::create('user_details', function (Blueprint $table) {
            $table->increments('id');
            $table->string('phone')->nullable();
            $table->string('city')->nullable();
            $table->string('pincode')->nullable();
            $table->unsignedInteger('user_id');
            $table->foreign('user_id')->references('id')->on('users');
            $table->timestamps();
        });

我曾尝试在RegisterControllercreate函数中添加以下内容

protected function create(array $data)
    {   
        User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
        ]);

        UserDetails::create([
            'user_id' => Auth::user()->id
        ]);

        return;
    }

但它不起作用并显示出来

Trying to get property 'id' of non-object".

帮我解决这个问题。

提问于
用户回答回答于

@MateusJunges的答案是正确的,但你做的错误就是这样

“将[user_id]添加到fillable属性以允许在[App \ UserDetails]上进行批量分配。”

为了解决这个错误,我必须将此代码添加到我的UserDetails模型:

protected $fillable = [
        'user_id'
    ];

你可以参考这里

之后@MateusJunges的所有代码都是正确的。

用户回答回答于

您可以修改create功能,打开app/Http/Controllers/Auth/RegisterController.php

默认情况下:

protected function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
    ]);
}

只需将其更改为

protected function create(array $data)
{
    $user = User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
    ]);
    UserDetails::create([
        'user_id' => $user->id
    ]);

    return $user;
}

扫码关注云+社区

领取腾讯云代金券