我在Laravel中有AuthController,我有2个表,一个是Users,一个是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?
答案 0 :(得分:33)
尝试使用返回对象的->id
,例如:
$id = $this->create($data)->id;
答案 1 :(得分:15)
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,
]);
答案 2 :(得分:5)
Eloquent有一种处理saving relationships的好方法,可以在你的情况下使用。它允许您保存相关模型而无需直接访问模型。当然,您必须首先确保您的关系在相应的模型中定义。
下面将创建用户及其信息。我假设您的关系方法被称为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为您处理!
答案 3 :(得分:2)
此外,如果您不使用Eloquent,则可以使用insertGetId
:
$id = DB::table('users')->insertGetId(
[ 'name' => 'John Doe', 'email' => 'john@example.com']
);
答案 4 :(得分:0)
使用insertGetId();它为您提供了插入行的ID。
$userId = User::insertGetId([
'name' => $request->input('name'),
'email' => $request->input('email'),
'password' => bcrypt($request->input('password')),
]);
答案 5 :(得分:0)
假设我有一个模型名称 Employee ,我想在该模型中插入一些数据,也想获取表ID。因此,我可以通过以下代码轻松实现此目标:
$employee = new Employee();
$employee->employeeName = 'Something';
$employee->save();
$employee->id;