Cara Mendapatkan Last Inserted Id Menggunakan Laravel Eloquent

Pada beberapa kesempatan, seorang developer memerlukan id terakhir yang dibuat oleh Laravel untuk keperluan tertentu.

Misalnya saja ketika hendak insert beberapa data sekaligus yang saling terkait satu sama lain (berelasi).

Contoh kasusnya adalah sebagai berikut. Seorang developer ingin insert data user sekaligus motor yang dimilikinya saat proses registrasi berlangsung. Maka salah satu cara yang bisa dilakukan adalah sebagai berikut:

  • Insert data user
  • Mendapatkan id user yang baru saja dibuat tersebut
  • Insert data motor dan memasukkan id user pada kolom user_id pada tabel motors.

Cara insert data user secara sederhana bisa dilakukan dengan cara berikut:

$user = User::create([
'email' => 'nusagates@gmail.com',
'name' => 'Ahmad Budairi',
'password'=> bcrypt('password123')
]);

Cara mendapatkan id user yang baru saja dibuat menggunakan cara berikut:

$id = $user->id;

Agar lebih aman maka pengambilan id user tersebut ditambahkan tanda tanya ganda beserta nilainya. Hal ini berguna untuk menentukan nilai variabel $id jika $user->id tidak terdefinisi atau user tidak berhasil dibuat. Sehingga kodingannya menjadi seperti di bawah ini:

$id = $user->id??null;

Pada contoh kodingan di atas, nilai $id akan menjadi null jika $user tidak memiliki object bernama id. Hal itu disebabkan karena data user belum berhasil ditambahkan kedalam database.

Biar lebih cakep lagi kita bisa mewadahi pengambilan id beserta pembuatan data motor di dalam sebuah block yang akan dijalankan jika user berhasil dibuat saja. Contohnya sebagai berikut:

if($user){
$id = $user->id;
Motor::create([
'user_id' => $id'
'name' => 'Motorku',
'brand' => 'Honda',
'type' => 'Supra Fit X'
]);
}

Sebetulnya ada cara yang lebih elegan lagi untuk insert data motor dibanding cara di atas yang mengambil id secara manual. Caranya adalah dengan memanfaatkan relasi yang sudah didefinisikan pada model User.

Jika di dalam model User sudah didefinisikan relasi one to many bernama motors maka kita bisa menggunakannya untuk insert data dengan cara sebagai berikut:

if($user){
$user->motors()->create([
  'name' => 'Motorku',
  'brand' => 'Honda',
  'type' => 'Supra Fit X'
]);
}

Perhatikan pada contoh di atas. Method motors() diambil dari relasi yang telah terdefinisikan pada model user. Dengan cara ini, kita tidak perlu lagi memasukkan id user secara manual karena sudah ditangani oleh Laravel melalui relasi tersebut.

Komentar