Пять способов получения последнего вставленного ID в Laravel
В этой статье мы рассмотрим несколько методов получения 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. Счастливого кодирования!