Пять способов получения последнего вставленного ID в Laravel

Источник: «5 Ways to Retrieve the Last Inserted ID in Laravel»
В Laravel после вставки данных в таблицу базы данных может потребоваться получить ID последней вставленной после создания записи. Этот идентификатор необходим для решения различных задач, таких как перенаправление пользователей на вновь созданный ресурс или выполнение дальнейших операций.

В этой статье мы рассмотрим несколько методов получения ID последней вставки в Laravel с помощью моделей Eloquent, DB-фасада или прямого доступа к экземпляру PDO. Давайте рассмотрим различные подходы

Метод 1: Получение идентификатора вставки с помощью Model::create

Одним из распространённых способов вставки данных в базу и получения последнего вставленного идентификатора является использование метода create в модели Eloquent. Этот метод не только вставляет данные, но и автоматически получает последний вставленный идентификатор. Вы можете легко получить доступ к ID как к свойству: $user->id. Рассмотрим следующий пример:

$user = User::create([
'name' => 'Steve Rogers',
'email' => 'captain.america@marvel.com',
'password' => bcrypt('password123'),
]);

$lastInsertedId = $user->id;

Обратите внимание, что при передаче массива свойств в функцию create необходимо убедиться, что они определены как заполняемые, иначе значения не будут записаны в базу данных. В нашем примере это означает, что необходимо обеспечить правильное определение класса User: protected $fillable = ['name', 'email', 'password'];

Метод 2: Получение идентификатора вставки с помощью new Model() и save()

Другой подход к вставке данных и получению последнего вставленного идентификатора заключается в создании нового экземпляра модели, установке атрибутов и последующем вызове метода save. Вы можете легко получить доступ к ID как к свойству с помощью $user->id. Рассмотрим следующий пример:

$user = new User();
$user->name = 'Natasha Romanoff';
$user->email = 'black.widow@marvel.com';
$user->password = bcrypt('password123');
$user->save();

$lastInsertedId = $user->id;

Метод 3: Получение идентификатора вставки с помощью фасада DB insertGetId()

Если необходимо вставить данные без использования моделей Eloquent, можно воспользоваться методом insertGetId, предоставляемым фасадом DB.

$lastInsertedId = DB::table('users')->insertGetId([
'name' => 'Bruce Banner',
'email' => 'hulk@marvel.com',
'password' => bcrypt('password123'),
'created_at' => \Carbon\Carbon::now(),
'updated_at' => \Carbon\Carbon::now(),
]);

Обратите внимание, что при вставке записей с помощью этого метода значения timestamp не будут заполнены автоматически, даже если они определены в Migration. По этой причине мы включили код для их ручной генерации с помощью Carbon.

Метод 4: Получение ID вставки с помощью Model::insertGetId

Если вы вставляете данные непосредственно через модель и хотите получить последний вставленный идентификатор, вы можете использовать метод insertGetId в самой модели.

$lastInsertedId = User::insertGetId([
'name' => 'Clint Barton',
'email' => 'hawkeye@marvel.com',
'password' => 'password123',
'created_at' => \Carbon\Carbon::now(),
'updated_at' => \Carbon\Carbon::now(),
]);

Обратите внимание, что при вставке записей с помощью этого метода значения timestamp не будут заполнены автоматически, даже если они определены в Migration. По этой причине мы включили код для их ручной генерации с помощью Carbon.

Метод 5: Прямой доступ к PDO lastInsertId

Вы также можете напрямую обратиться к экземпляру PDO, чтобы получить последний вставленный идентификатор.

DB::table('users')->insert([
'name' => 'Peter Parker',
'email' => 'spiderman@marvel.com',
'password' => bcrypt('password123'),
'created_at' => \Carbon\Carbon::now(),
'updated_at' => \Carbon\Carbon::now(),
]);

$lastInsertedId = DB::getPdo()->lastInsertId();

Обратите внимание, что при вставке записей с помощью этого метода значения timestamp не будут заполнены автоматически, даже если они определены в Migration. По этой причине мы включили код для их ручной генерации с помощью Carbon.

Заключение

Следуя методам, описанным в этой статье, можно легко получить ID последней вставки, используя модели Eloquent, фасад DB или прямой доступ к экземпляру PDO. Выбирайте тот метод, который соответствует вашим потребностям. Однако стоит отметить, что метод 1 и метод 2 наиболее часто используются в приложениях Laravel. Счастливого кодирования!

Ссылки

Дополнительные материалы

Предыдущая Статья

6 лучших практик Laravel RESTful APIs

Следующая Статья

Ошибка Livewire 3 и Laravel Breeze: Конфликт Alpine.js