Loading...

Laravel firstOrNew, firstOrCreate, firstOr, and updateOrCreate method

Jika sebelumnya anda sudah pernah menggunakan laravel, anda seharusnya sudah familiar dengan method standar dari Eloquent model seperti 'make()', 'create()', 'update', and 'save()'. laravel juga menyertakan beberapa method lain yang juga sangat berguna untuk membuat atau memperbarui Model yang menurut saya kurang mendapatkan perhatian. jadi dalam artikel ini, saya ingin membahas beberapa metode tambahan ini dan menjelaskan bagaimana method ini dapat digunakan.

firstOrNew

method 'firstOrNew' sangat berguna untuk mencari/menemukan Model pada baris pertama dengan kondisi tertentu atau membuat data baru jika tidak ditemukan data.

jika pada umumnya kita menggunakan logic seperti ini untuk mengecek apakah ada data, jika tidak ada data maka buat sebuah data baru.

$user = User::where('email', request('email'))->first();
 
if ($user === null) {
    $user = new User(['email' => request('email')]);
}
 
$user->name = request('name');
 
$user->save()

kemudian, ubah menjadi seperti berikut:

$user = User::firstOrNew(['email' =>  request('email')]);
 
$user->name = request('name');
 
$user->save()

kamu juga bisa menambahkan array sebagai attribute tambahan untuk dijadikan parameter kedua jika tidak ada data yang ditemukan.

$user = User::firstOrNew(
    ['email' =>  request('email')],
    ['name' => request('name')]
);
 
$user->save();

firstOrCreate

method 'fisrtOrCreate' sangat mirip dengan method 'firstOrNew'. ia mencoba menemukan data Model dengan attribut yang anda berikan pada parameter pertama. jika data tidak ditemukan, maka secara otomatis akan membuat dan menyimpan Model baru setelah menerapkan atribut apapun yang diberikan dalam parameter kedua:

$user = User::firstOrCreate(
    ['email' =>  request('email')],
    ['name' => request('name')]
);
 
// No call to $user->save() needed

pada method firstOrCreate tidak dibutuhkan pemanggilan function $user->save().

firstOr

method ini juga terbilang baru buat saya, method firstOr mengambil Model pertama dari query, atau jika tidak ada Model yang cocok, method ini akan memanggil callback yang diteruskan. ini bisa sangat berguna jika anda memerlukan langkah extra saat membuat data user atau ingin melakukan sesuatu selain membuat data user:

$user = User::where('email', request('email'))->firstOr(function () {
    $account = Account::create([ //... ]);
 
    return User::create([
        'account_id' => $account->id,
        'email' => request('email'),
    ]);
});

updateOrCreate

method 'updateOrCreate' mencoba mencari data Model yang sesuai dengan parameter yang sama, jika data ditemukan, maka data tersebut akan diupdate sesuai dengan parameter selanjutnya, jika tidak ditemukan data yang sesuai maka akan membuat data baru sesuai dengan parameter yang ditentukan.

jika biasanya kita menggunakan logic seperti ini.

$user = User::where('email', request('email'))->first();
 
if ($user !== null) {
    $user->update(['name' => request('name')]);
} else {
    $user = User::create([
      'email' => request('email'),
      'name' => request('name'),
    ]);
}
 
// Do other things with the User

kode diatas ingin mencari sebuah user berdasarkan email yang ditentukan, jika data user dengan email tersebut tidak ada, maka akan dibuatkan sebuah data baru dengan parameter email dan name.

sekarang kita bisa mengubah kode diatas menggunakan method 'updateOrCreate' menjadi seperti berikut:

$user = User::updateOrCreate(
    ['email' =>  request('email')],
    ['name' => request('name')]
);
 
// Do other things with the User

Kesimpulan

Secara keseluruhan, saya pikir metode ini dapat membantu membersihkan kode kita dalam keadaan tertentu dan merupakan pilihan yang bagus untuk pegangan kita. beritahu saya jika anda mengetahui method lain yang benar-benar bermanfaat dan belum banyak orang peduli tentang method tersebut. saya menyukai belajar tentang detail kecil seperti ini yang membuat laravel sangat menyenangkan untuk membantu pekerjaan saya.

Share this Post: