Laravel:获取User::create的ID并使用该ID插入新行

42

我在Laravel中有一个AuthController,有两个表,一个是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']),
        ]);
    }

我想要向Users_Information插入一列idcurrent_foodcurrent_level

我有一个控制器用于Users_Information,名为UserInformation,那么我只需调用UserInformation::create,但我如何从User::create中获取id呢?

7个回答

82

尝试使用返回对象的->id,类似于:

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

2
@TheGod39 请将此答案设置为已接受,以便用户可以快速查看正确答案。 - Camilo
1
使用 $insert = Model::create([]); $insert->id; - vicky

49

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,
]);

1
create()方法返回模型——这有助于 - partho
在Laravel 6中为我工作的是Laravel的Auth/RegisterController.php本地文件,谢谢! - Nube Colectiva

10
使用 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


10
假设我有一个名为Employee的模型,并且我想要在这个模型中插入一些数据并获取表格ID。那么我可以通过下面的代码轻松实现:
 $employee = new Employee();
 $employee->employeeName = 'Something';
 $employee->save();
 $employee->id;

8

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会为您处理!

6
此外,如果您没有使用Eloquent,您可以使用insertGetId
$id = DB::table('users')->insertGetId(
    [ 'name' => 'John Doe', 'email' => 'john@example.com']
);

0

请记住,如果您使用自定义ID设置表格,则必须在代码中指明。在我的情况下,我的表格“Antecedentes”具有自定义ID“ant_id”,因此“id”无法使用,必须像这样输入“ant_id”:

$success = Antecedentes::create($data)->ant_id;

我还可以继续下去。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接