You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8中使用Eloquent的insert方法获取最后插入的ID

Laravel使用insert方法插入数据后获取最后插入ID的解决方案

Model::insert() 方法底层基于查询构造器实现,仅会返回布尔值表示写入是否成功,本身不支持直接返回最后插入的自增ID,可根据你的写入场景选择对应方案:

单条数据插入场景

直接将insert替换为insertGetId方法即可,该方法会直接返回新写入数据的自增ID:

$id = Product::insertGetId($alldata);

if ($id) {
    return response()->json([
        'success' => 'Ürün başarıyla Eklendi.',
        'id' => $id
    ]);
}

如果你的表主键名不是默认的id,可以给方法传第二个参数指定主键名,例如insertGetId($alldata, 'product_id')。

批量数据插入场景

如果你的$alldata包含多条要批量写入的数据,可选择以下两种方案:

  • 方案A:事务加锁获取
    配合事务和行锁避免并发插入干扰,此时拿到的表最大ID就是本次插入的最后一条ID,不会混入其他请求写入的数据:
    $lastInsertId = 0;
    \DB::transaction(function () use ($alldata, &$lastInsertId) {
        // 加锁阻塞其他写入操作,避免并发导致ID不准
        Product::lockForUpdate()->max('id');
        Product::insert($alldata);
        $lastInsertId = Product::max('id');
    });
    
    if ($lastInsertId) {
        return response()->json([
            'success' => 'Ürün başarıyla Eklendi.',
            'id' => $lastInsertId
        ]);
    }
    
  • 方案B:单条循环写入
    数据量不大的场景下,改用create方法循环写入,可以直接拿到每一条的写入ID,性能比批量insert稍差:
    $lastInsertId = 0;
    foreach ($alldata as $item) {
        $product = Product::create($item);
        $lastInsertId = $product->id;
    }
    

    注意使用create方法需要提前在模型的$fillable属性中配置允许批量写入的字段。


内容的提问来源于stack exchange,提问作者Tekin GÜNDOĞDU

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 16:00:01