在Laravel注册后如何插入另一个表?

时间:2019-07-17 04:30:11

标签: php database laravel database-relations

因此,我有一个laravel网络并有一些表,其中两个是usersuser_datauser_data有一个外键user_id,它引用了id上的users

users具有用户名,电子邮件,密码等常规属性,而user_datausers具有一对一关系,并具有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

非常感谢您。

4 个答案:

答案 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
        ]);
    });

}