如何在 laravel 用户注册后将用户添加到另一个 table?
How to add user to another table after user registration in laravel?
我正在 Laravel 5.6 开发一个电子商务项目,其中我有两个 table 供用户使用:
- 用户 用于密码和其他一些东西,
- 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的所有代码都是正确的。
我正在 Laravel 5.6 开发一个电子商务项目,其中我有两个 table 供用户使用:
- 用户 用于密码和其他一些东西,
- 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的所有代码都是正确的。