如何在 Eloquent ORM laravel 中获取最后一个插入 ID

Posted

技术标签:

【中文标题】如何在 Eloquent ORM laravel 中获取最后一个插入 ID【英文标题】:How to get last insert id in Eloquent ORM laravel 【发布时间】:2015-03-08 13:17:51 【问题描述】:

我正在使用“Laravel 中的 Eloquent ORM”执行数据库操作。我只想取数据库中最后一个插入id(不是最大id)。

我在 laravel Eloquent ORM 中搜索获取最后一个插入 ID,我得到了以下链接 (Laravel, get last insert id using Eloquent),它指的是从以下函数“$data->save()”获取最后一个插入 ID。

但我需要得到

"Model::create($data)";

我的查询:

GeneralSettingModel::create($GeneralData);

User::create($loginuserdata);

如何检索最后插入的 id?

【问题讨论】:

Laravel, get last insert id using Eloquent的可能重复 如果If the table has an auto-incrementing id 试试这个:***.com/a/46482971/2815635 【参考方案1】:

就像文档说的:Insert, update, delete

"您也可以使用 create 方法将新模型保存在单个 线。 插入的模型实例将从 方法。但是,在这样做之前,您需要指定一个 与所有 Eloquent 模型一样,模型上的可填充或受保护属性 防止批量分配。

保存或创建使用自动递增 ID 的新模型后, 您可以通过访问对象的 id 属性来检索 ID:"

$insertedId = $user->id;

所以在您的示例中:

$user = User::create($loginuserdata);
$insertedId = $user->id;

然后在table2上

$input['table2_id'] = $insertedId;
table2::create($input);

【讨论】:

值得注意的是,该文档具有误导性,因为显示的第一个方法是 ->save();,而 IMO 并不足以解释 save() 返回一个布尔值而 only 插入、更新和删除返回实例。特别是因为 in 说“在保存或创建之后”【参考方案2】:

**** 对于 Laravel ****

$user = new User();

$user->name = 'John';

$user->save();

//Getting Last inserted id

$insertedId = $user->id;

【讨论】:

$lastInsertedID = DB::table('users') ->insert(array('email_id' => $email_id, 'name' => $name)) ->lastInsertId(); 感谢您的回答,但我解决了我的问题。这是关于primaryKey的。我在模型中更改了主键。所以我没有得到最后一个ID。将primarykey更改为id后,它起作用了。 感谢您的回复【参考方案3】:
$lastId = User::create($loginuserdata)->id;

【讨论】:

【参考方案4】:

正如其他人在我之前所说,您可以使用检索 id

$model->id;

但前提是您使用 eloquent 的标准命名约定。如果要为 primaryKey 列使用其他名称,例如:

class Users extends Model
    $primaryKey = 'userid';

您可以通过调用检索最后插入的 id

$model->userid;

描述在:https://laravel.com/docs/master/eloquent#eloquent-model-conventions 哪里可以找到:

Eloquent 还会假设每个表都有一个主键列 命名标识。您可以定义一个 $primaryKey 属性来覆盖它 约定。

此外,Eloquent 假设主键是递增的 整数值,这意味着默认情况下主键将是 自动转换为 int。如果您希望使用非递增或 非数字主键,您必须设置公共 $incrementing 将模型上的属性设置为 false。

【讨论】:

亲爱的@Krzysiek Grzembski 我需要在我的控制器中使用它。我在模型中更改了它,因为你在模型中编写了它。但是现在 $model->userid;是可访问的。我需要它在我的控制器中。请指导... @Raham 请查看我更新的答案。没有任何代码,很难说出你的问题。 实际上我解决了我的问题。我的问题是如何从表中检索最后插入的一个。现在我查找了你如何返回最后一个插入的答案。你在哪里定义 $model ... 问题是触发器生成的keys【参考方案5】:

您可以像这样将数据包装在 insertGetId() 方法中

$id = DB::table('table')->insertGetId( $data );

在这种情况下,数组 $data 看起来像这样

$data = [ 'field' => 'data' , 'field' => 'data' ];

如果您使用的是 DB 外观,您可以将 lastInsertID() 方法附加到您的查询中。

$lastInsertedID = DB::table('table')->insert( $data )->lastInsertId();

【讨论】:

值得注意的是,insertGetId 仅在列实际命名为 id 时才有效。【参考方案6】:

你可以这样做,

public function store(Request $request,ModelName $obj)

        $lastInsertedId = $obj->create($request->all())->id;


希望这会对你有所帮助。

【讨论】:

【参考方案7】:
$user = (new user)->create($request->all()) ;

        \Session::flash('message', 'Thanks , Your record No (' .$user->id . ') has been Successfully added');

这是我的解决方案。我返回插入的对象并获取其 ID 或任何其他属性。

【讨论】:

【参考方案8】:

此代码适用于 Laravel 5.3:

$upstatus = User::create($status);
return response()->json($upstatus);

我被称为data.id的用户页面/网站

【讨论】:

【参考方案9】:

这是一个雄辩的模型:

$user = new Reports();        
$user->email= 'david@example.com';  
$user->save();
$lastInsertId = $user->id;

使用查询生成器的解决方案:

 $lastInsertId = DB::table('reports')->insertGetId(['email' => 'david@example.com']);

【讨论】:

【参考方案10】:

这是我的尝试:

$model_ins = Model::orderBy('id', 'desc')->take(1)->first();

并使用$model_ins->id

【讨论】:

【参考方案11】:

这是一种更简单的方法,适用于您插入的所有方式:

DB::getPdo()->lastInsertId()

【讨论】:

以上是关于如何在 Eloquent ORM laravel 中获取最后一个插入 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Eloquent ORM laravel 中获取最后一个插入 ID

如何在 Laravel Eloquent ORM 中获取插入的多行数据

如何在我的 Eloquent ORM laravel 选择中包含一个过程?

如何根据 laravel eloquent orm 中的两列进行查询

如何在不使用Eloquent ORM时构建Laravel应用程序

Angular JS 与 Laravel - 如何绑定 Eloquent ORM 数组以查看