Laravel: Получить идентификатор пользователя:: создать и вставить новую строку, используя этот идентификатор

У меня есть AuthController в Laravel, и у меня есть 2 таблицы, один из них - Пользователи, а один - User_Information, и я хочу вставить в User_Information при регистрации.

Итак, я хочу получить идентификатор из следующего метода и вставить новую строку и установить идентификатор столбца этой строки на идентификатор пользователя, который я только что создал.

 /**
     * 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']),
        ]);
    }

Я хочу вставить в Users_Information с идентификатором столбца, current_food и current_level

У меня есть контроллер для User_Information, называемый UserInformation, можно ли просто вызвать UserInformation:: create, но как бы получить идентификатор из User:: create?

Ответ 1

Попробуйте использовать возвращаемый объект ->id, например:

$id = $this->create($data)->id;

Ответ 2

Метод 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,
]);

Ответ 3

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 явно user_id потому что мы просто создали информацию путем доступа к определенным вами отношениям; Laravel/Eloquent с этим справится!

Ответ 4

Кроме того, если вы не используете Eloquent, вы можете использовать insertGetId:

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

Ответ 5

использовать insertGetId(); это дает вам идентификатор вставленной строки.

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

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