Последний вставленный идентификатор внутри транзакции с Lumen / Laravel

Как я могу получить последний вставленный идентификатор Я использую следующий код, который работает:

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

Но следующий код не дает мне последний вставленный идентификатор.

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

Даже когда я использую переменную ($ lastID) вне транзакции, она все равно не работает. Что я здесь делаю не так?

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
1
1 111
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

При использовании построителя запросов в Laravel есть функция insertGetId, которая вставляет строку и возвращает вновь созданный id.

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

Получить его легко:

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

Уловка должна быть довольно простой, если вы используете Model. Предположим, у вас модель Member. Поэтому, когда вы пытаетесь вставить запись, он возвращает вставленную запись в ответ.

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

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

Надеюсь, что это работает для вас.

См. Пример кода ниже. Надеюсь, поможет.

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
}

Другие вопросы по теме