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.