在Laravel中获取插入行的ID

3

这是我的代码:

User::create([
    'name' => $request->name,
    'email' => $request->email,
    'cell_phone' => $request->cell_phone,
    'province_id' => $request->province,
    'city_id' => $request->city,
    'job' => $job,
    'company' => $company,
    'member_num' => $member_num,
]);

正如您所知,它会在数据库中插入一行新数据。现在我需要获取已插入行的id。我该如何获得?


请注意,我知道如果我使用$obj->save(),我也可以做到同样的事情,id将是$obj->id;。但是我想知道当我使用create()时该怎么做。

$userDetials = User::create([ 'name' => $request->name, 'email' => $request->email, 'cell_phone' => $request->cell_phone, 'province_id' => $request->province, 'city_id' => $request->city, 'job' => $job, 'company' => $company, 'member_num' => $member_num, ]); - Ankur Tiwari
你在谈论哪个版本的Laravel? - Chay22
4个回答

3
您可以使用以下代码获取用户插入的ID:
$userDetials = User::create([
     'name' => $request->name,
     'email' => $request->email,
     'cell_phone' => $request->cell_phone,
     'province_id' => $request->province,
     'city_id' => $request->city,
     'job' => $job,
     'company' => $company,
     'member_num' => $member_num,
]);
if(isset($userDetials->id))    
{
    //if inserted 
    return $userDetials->id;
}
else
{
   //not inserted
}
create方法返回保存的模型实例。

@stack 欢迎 :) - Ankur Tiwari

1

根据文档所述

create方法返回已保存的模型实例:

在您的情况下,它将是:

$user = User::create(...)

我明白了,谢谢,点赞。但是你能告诉我如何检查插入是否成功吗?我的意思是这样正确吗?if( isset($user->id) ){ /* row inserted */ } - stack
@stack,您可以使用类似于if($user instance of User){...}的方式进行检查,以检查$user是否是您的模型的实例。 - M Khalid Junaid
它返回模型实例,无论save是否成功。 - lagbox
@lagbox 然后您也可以使用isset,以及 if($user->id){...} - M Khalid Junaid

1
$data = User::create([
      'name' => $request->name,
      'email' => $request->email,
      'cell_phone' => $request->cell_phone,
      'province_id' => $request->province,
      'city_id' => $request->city,
      'job' => $job,
      'company' => $company,
      'member_num' => $member_num,
]);

在执行create操作后,$data->id应该是最后插入的ID。
return Response::json(array('success' => true, 'last_insert_id' => $data->id), 200);

1

这里createsave两个方法都返回最后生成的id,但要确保你使字段自增。

$userobj = User::create([
'name' => $request->name,
'email' => $request->email,
'cell_phone' => $request->cell_phone,
'province_id' => $request->province,
'city_id' => $request->city,
'job' => $job,
'company' => $company,
'member_num' => $member_num,
]);
echo $userobj->id;

如果您想使用create方法,您必须在模型中将所有字段定义为可填充的,并且save()方法用于创建和编辑,所以使用save方法是一个好习惯。
save方法的示例。
 $user = User::first();
 $user->email = 'updated@domain.com';
 $user->save();
echo $user->id;

两种方法都返回最后插入的ID。 希望能对您有所帮助, 谢谢...

欢迎并感谢您的光临 :) - Ritesh Khatri

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