【问题标题】:How to get last inserted id using Eloquent::insert()如何使用 Eloquent::insert() 获取最后插入的 id
【发布时间】:2016-08-15 23:17:47
【问题描述】:

我在 laravel 5 中像这样插入批量插入:

$data = array(
    array('name'=>'Jack', 'age'=>'24'),
    array('name'=>'Tom', 'age'=>'37'),
    //...
);

Users::insert($data);

知道如何获取最后插入的 id 吗?

【问题讨论】:

  • 最简单的方法... $data = array(array('name'=>'Jack', 'age'=>'24'), array('name'=>'Tom' , '年龄'=>'37'), //... ); foreach($data as $user){ $u = Users::create($user); $u->保存(); $lastId = $u->id; } 回声 $lastId;
  • 澄清一下,您想要最后插入的 id 还是插入数据的所有 id?

标签: php laravel laravel-5 laravel-5.1


【解决方案1】:

因此,批量插入数据时不能使用insertGetId()。所以如果你想保持数据库的完整性,你可以这样做:

$lastRow = array_pop($data); // Cutting off last item from an array

Users::insert($data);
$lastId = Users::insertGetId($lastRow);

我知道这是一个非常愚蠢的解决方案,它会创建 2 个查询而不是一个,但如果你找不到更好的,你可以使用它。

替代方案

你也可以试试这个:

$lastId = DB::select('select last_insert_id()');

这可以工作,it shouldn't brake DB integrity:

对于 LAST_INSERT_ID(),最近生成的 ID 保存在 服务器基于每个连接。不会被别人改变 客户。如果您更新另一个 AUTO_INCREMENT 它甚至不会更改 具有非魔术值的列(即,非 NULL 值和 不是 0)。

【讨论】:

    【解决方案2】:

    两个都可以

    使用 Eloquent 模型

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

    或者

    使用查询生成器

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

    【讨论】:

    • 操作者特别要求提供一个使用大量插入的示例insert()
    猜你喜欢
    • 2014-01-31
    • 1970-01-01
    • 2019-05-27
    • 2015-03-08
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    相关资源
    最近更新 更多