Ответ 1
Попробуйте использовать возвращаемый объект ->id
, например:
$id = $this->create($data)->id;
У меня есть 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?
Попробуйте использовать возвращаемый объект ->id
, например:
$id = $this->create($data)->id;
Метод 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,
]);
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 с этим справится!
Кроме того, если вы не используете Eloquent, вы можете использовать insertGetId
:
$id = DB::table('users')->insertGetId(
[ 'name' => 'John Doe', 'email' => '[email protected]']
);
использовать insertGetId(); это дает вам идентификатор вставленной строки.
$userId = User::insertGetId([
'name' => $request->input('name'),
'email' => $request->input('email'),
'password' => bcrypt($request->input('password')),
]);