与Lumen / Laravel一起最后插入的id内部事务

时间:2018-07-17 11:27:14

标签: mysql laravel transactions lumen

如何获取最后插入的ID 我使用以下有效的代码:

DB::insert("INSERT INTO members (name,email)values($name,$email)");
$lastID = DB::getPdo() -> lastInsertId();

但是以下代码没有给我最后插入的ID。

DB::transaction(function () {
    $result = DB::insert("INSERT INTO members (name,email)values($name,$email)");
    $lastID = DB::getPdo() -> lastInsertId();
}, 5);
return $lastID;

即使我在事务外使用变量($ lastID),它仍然无法正常工作。 我在这里做什么错了?

4 个答案:

答案 0 :(得分:2)

使用查询生成器时,Laravel具有函数insertGetId,该函数插入行并返回新创建的id

$lastid = DB::table('members')->insertGetId(['name' => $name, 'email' => $email]);

答案 1 :(得分:0)

您可以轻松获得它:

$last_id = DB::table('members')->insertGetId(['name => $name, 'email => $email]);

答案 2 :(得分:0)

如果使用模型,则技巧应该非常简单。假设您有Member模型。因此,当您尝试插入记录时,它会返回插入的记录作为响应。

/** Insert record **/
$member = Member::create(['name' => $name, 'email' => $email])

/** your last inserted id will be in $member **/
$lastInsertedId = $member->id

希望这对您有用。

答案 3 :(得分:0)

请参见下面的示例代码。希望对您有所帮助。

public function testModel($data) {
    $id = DB::transaction(function() use ($data) {
        $record_id = DB::table('users')->insertGetId($data);

        DB::update('update users set votes = 100 where name = ?', ['John']);

        return $record_id;
    });

    return $id; // this will return the last inserted id which is the $record_id inside the DB::transaction
}