因此,我有一个laravel网络并有一些表,其中两个是users
和user_data
。
user_data
有一个外键user_id
,它引用了id
上的users
。
users
具有用户名,电子邮件,密码等常规属性,而user_data
与users
具有一对一关系,并具有game_money,game_job,game_tier等属性。
如果将这2个表合并为1个表,则列太长,因此我很难对其进行归一化。
用户注册正在顺利进行。但是我不知道当新用户注册后如何在user_data
中添加新条目并在users
中添加新条目。
user_data
中的属性列(例如game_money等)由laravel外部的外部应用程序填充,因此我所需要做的就是向user_data.user_id
外键添加一个条目,并让user_data中的其他属性使用默认值或null,然后由外部应用程序更新。
这是我的user_data
迁移:
Schema::create('user_data', function (Blueprint $table) {
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
$table->string('account_tier')->default("Free");
$table->float('economy')->default(0);
$table->string('job')->nullable();
$table->timestamps();
});
我应该将插入查询放在laravel中的什么位置?还是应该使用外部应用处理user_data
?
非常感谢您。
答案 0 :(得分:1)
在RegisterController中 内部创建功能
$user= User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
//UserData is the Model of user_data table
$user->UserData->create(['job'=>$data['job']]);
return $user
答案 1 :(得分:1)
您应该在 user_data 表上使用 id 作为主键。顺便说一句,您可以只使用以下代码获得所需的结果。 在注册方法中,使用类似以下的内容:
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
用户变量保存着新创建的用户的信息。现在是时候插入到user_data表中了。假设模型是UserData。
UserData::create([
'user_id' => $user->id,
............
]);
答案 2 :(得分:0)
尝试此示例:
use Illuminate\Support\Facades\DB;
$user_data= array(
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
);
$role_data= array(
'user_name' => $data['name'],
'email' => $data['email']
);
$response = DB::table('users')->insert($user_data);
$response = DB::table('role')->insert($role_data);
答案 3 :(得分:0)
当您定义这些模型之间的关系时,您可以使用以下模型启动事件;
public static function boot()
{
parent::boot();
self::created(function($model){
$model->userData()->create([
'user_id' => $model->id,
'job' => $model->job
]);
});
}