如何以雄辩的方式将最后一个 id 插入数据库中?

Posted

技术标签:

【中文标题】如何以雄辩的方式将最后一个 id 插入数据库中?【英文标题】:How to get last id inserted on a database with eloquent? 【发布时间】:2018-08-19 02:59:36 【问题描述】:

我正在尝试获取我的表的最后一个 id,我希望它知道我的计数器的下一个数字是什么并将其显示给用户,我尝试使用 last() 方法但我得到了这个:

>>> $trans = Transferencia::last()
BadMethodCallException with message 'Call to undefined method Illuminate\Database\Query\Builder::last()'

还有其他方法可以知道吗?

【问题讨论】:

如果ID 是AUTO_INCREMENT,没有可靠的方法可以知道下一个是什么。 也许运行select max(id) from table得到结果。 Get current AUTO_INCREMENT value for any table的可能重复 【参考方案1】:

在 Laravel 中获取最后插入的 ID 的 5 种方法:

使用insertGetId()方法:

$id = DB::table('users')->insertGetId(
[ 'name' => 'first' ]
);

使用lastInsertId()方法:

DB::table('users')->insert([
  'name' => 'TestName'
]);
$id = DB::getPdo()->lastInsertId();

核心 SQL 查询:

$id = DB::select('SELECT id FROM five_point_zero ORDER BY id DESC LIMIT 1');

使用create()方法:

$data = User::create(['name'=>'first']);
$data->id; // Get data id

使用save()方法:

$data = new User;
$data->name = 'Test';
$data->save();
dd($data->id);

【讨论】:

是的,当我插入一个项目时它可以工作,但在我的情况下我没有,所以我只想知道下一个可用的 id 是什么 @Christian 关于第三种方法你有最后一个id 然后$id+1 可用 这很聪明,尤其是第三种方法【参考方案2】:
>>> $data = DB::select('SELECT id FROM transferencia ORDER BY id DESC LIMIT 1');

NVM

【讨论】:

【参考方案3】:

您可以使用LAST_INSERT_ID() 函数。试试这个:

SELECT LAST_INSERT_ID() INTO yourTableName;

【讨论】:

【参考方案4】:

保存后,$data->id 应该是最后插入的。

return Response::json(array('success' => true, 'last_insert_id' => $data->id), 200);

【讨论】:

【参考方案5】:

您可以使用以下代码:

$data['password']= md5($request->password);
    
   $customer_id= DB::table('customer')
            ->insertGetId($data);
    echo $customer_id;

【讨论】:

【参考方案6】:

正如我所说的那样,您想知道下一次插入时将使用哪个 id。 如果表中有 AUTO_INCREMENT 主键,您可以使用查询获取该键的下一个值:

SELECT AUTO_INCREMENT
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = "TABLE_NAME"

但不建议在插入前向用户显示他的 ID,因为它可以从其他用户的会话中更改。

【讨论】:

【参考方案7】:

这可能是最好的答案:

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

并使用$trans->id

【讨论】:

以上是关于如何以雄辩的方式将最后一个 id 插入数据库中?的主要内容,如果未能解决你的问题,请参考以下文章

雄辩的 lastInsertId

laravel:雄辩的例子将数据插入数据库

使用中间表来定义一对一关系以避免外键循环的雄辩方式

如何将最后一个插入 id 数据发送到另一个函数?

在博客中插入图片

THINKPHP中如何进行循环插入多条数据