web-dev-qa-db-ja.com

Laravel:User :: createのIDを取得し、そのIDを使用して新しい行を挿入します

LaravelにAuthControllerがあり、2つのテーブルがあります。1つはユーザーで、もう1つはUsers_Informationです。登録時にUsers_Informationに挿入します。

したがって、次のメソッドからIDを取得し、新しい行を挿入して、その行の列IDを作成したユーザーのIDに設定します。

 /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return User
     */
    protected function create(array $data)
    {
        return User::create([
            'username' => $data['username'] . ' ' . $data['username2'],
            'mail' => $data['mail'],
            'password' => bcrypt($data['password']),
        ]);
    }

列ID、current_food、current_levelを使用してUsers_Informationに挿入したい

UserInformationというUsers_Informationのコントローラーがあり、UserInformation :: createを呼び出すだけですが、User :: createからidを取得するにはどうすればよいですか?

16
TheGod39

返されたオブジェクトの->idを使用してみてください:

$id = $this->create($data)->id;
36
Alexey Mezenin

create()メソッドはモデルを返します。

$user = User::create([
    'username' => $data['username'] . ' ' . $data['username2'],
    'mail' => $data['mail'],
    'password' => bcrypt($data['password']),
]);

$userInfo = UserInformation::create([
    'user_id' => $user->id,
    'current_food' => $food,
    'current_level' => $level,
]);
17
Pawel Bieszczad

Eloquentには 関係を保存する を処理する素晴らしい方法があり、これはあなたのケースで使用できます。モデルに直接アクセスせずに、関連するモデルを保存できます。もちろん、最初に関係が適切なモデルで定義されていることを確認する必要があります。

以下は、ユーザーとその情報を作成します。関係のメソッドはinformationと呼ばれますが、必要に応じて調整できます。

$user = User::create([
    'username' => $data['username'] . ' ' . $data['username2'],
    'mail' => $data['mail'],
    'password' => bcrypt($data['password']),
])->information()->create([
    'current_food' => $current_food,
    'current_level' => $current_level
]);

定義した関係にアクセスして情報を作成しただけなので、明示的にuser_idを設定しなかったことに注意してください。 Laravel/Eloquentがそれを処理します!

5
camelCase

また、Eloquentを使用していない場合は、insertGetIdを使用できます。

$id = DB::table('users')->insertGetId(
    [ 'name' => 'John Doe', 'email' => '[email protected]']
);
2
Felippe Duarte

insertGetId();を使用します挿入された行のIDを提供します。

$userId = User::insertGetId([
    'name' => $request->input('name'),
     'email' => $request->input('email'),
     'password' => bcrypt($request->input('password')),
]);

https://laravel.com/docs/5.7/queries#inserts

0
Abid Shah

モデル名Employeeがあり、このモデルにデータを挿入し、テーブルIDも取得したいとします。だから私は以下のコードでこれを簡単に達成できます:

 $employee = new Employee();
 $employee->employeeName = 'Something';
 $employee->save();
 $employee->id;
0
Md Shohag