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

How to add user to another table after user registration in laravel?

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

  1. 用户 用于密码和其他一些东西,
  2. UserDetails table 用于存储用户地址、phone、城市、密码等

Users table 中注册用户并存储凭据时,我想在 UserDetails 中创建一个列 table 与添加到 Users table.

时生成的相同 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();
        });

我曾尝试在 RegisterController

create 函数中添加以下内容
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".

帮我解决这个问题。

您可以在app/Http/Controllers/Auth/RegisterController.php

上修改create函数

默认情况下:

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;
}

@MateusJunges 的答案是正确的,但是你做完后得到的错误是

"Add [user_id] to fillable property to allow mass assignment on [App\UserDetails]."

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

protected $fillable = [
        'user_id'
    ];

可以参考here.

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