使用Laravel获取最后一次插入的ID

3
我遇到了一个问题。 我需要获取插入表中的最后一个id,然后将其添加到同一张表中。我的表中有两个字段"id"和"translation-of",它们都应该保存相同的值。id字段是自动递增的。如何实现这个功能???如果使用Excel上传类别,也会遇到同样的问题...请帮帮我...
我的控制器函数是:
$insert[] = ['translation_lang'=>'en','parent_id' =>$a[0],'name' => $value->name,'slug' =>$value->name,'description' => $value->description,'picture'=>$pic,'active'=>1];

$last_id =    \DB::table('categories')->max('id');  

if(!empty($insert)){                            
    \DB::table('categories')->insert($insert);
    \DB::table('categories')->where('id2',$last_id)->update(['translation_of' => $last_id]);
    return Redirect::to('admin/category');
}

等待响应。


将相同的信息存储两次听起来像是浪费存储空间。也许您需要更改您的方案,或者提供更多关于您正在尝试做什么的见解。 - RST
2个回答

9

不要使用

\DB::table('categories')->insert($insert);

使用

\DB::table('categories')->insertGetId($insert);

方法 insertGetId 将会插入数据并返回增加后的行ID号。

在使用 "\DB::table('categories')->insertGetId($insert);" 时,我遇到了一个错误。 - Pooja Krishna
错误 ---- "helpers.php文件第747行的ErrorException错误: preg_replace()函数参数不匹配,模式是字符串而替换是数组" - Pooja Krishna
这是因为插入应该只是一个array,而不是一个嵌套的array。所以,不要写成$insert[] = ['tra...,而是写成$insert = ['tra...。这是因为它需要插入一行数据来返回相应的ID。 - Steve Chamaillard
如果我想插入数据数组,我该怎么做?因为我通过Excel上传类别,所以需要同时插入大量数据。那么如何实现呢? - Pooja Krishna
您可以在数据上使用foreach并在每次迭代中使用最后一个ID。无论如何,您都不能在单个SQL请求中完成所有这些操作,因为它无法预见未来。 - Steve Chamaillard

1
使用insertGetId代替insert。
$id=DB::table('categories')->insertGetId($insert);

"

$id是您最后插入的ID

"

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