8 Maret 2023 • uyab

Cara Memanggil Method Eloquent first() Agar Tidak Terkena Null Pointer Exception


Masalah

Salah satu method Eloquent yang sering digunakan adalah first(). Sesuai yang terdapat dalam dokumentasi resminya, first() digunakan untuk mengambil satu record dari database.

$user = User::where('email', 'foo@example.com')->first();
$fullname = $user->first_name . ' ' . $user->last_name;

Yang sering dilupakan oleh para programmer, method first() di atas bisa jadi mengembalikan null, ketika tidak ada data di database sesuai dengan kondisi yang diberikan. Hasilnya, akan muncul error sejuta umat Trying to get property of non object ketika mencoba mengakase properti $user->first_name.

Solusi

Ada beberapa cara agar kode kita tidak error ketika data tidak ditemukan (method first() mengembalikan null). Beberapa diantaranya:

  1. Selalu tambahkan Guard Clause
  2. Gunakan firstOrFail()

Tambahkan Guard Clause

Guard Clause adalah kode yang digunakan untuk memastikan suatu prekondisi terpenuhi sebelum bisa melanjutkan ke baris kode berikutnya.

$user = User::where('email', 'foo@example.com')->first();
if ($user) {
    $fullname = $user->first_name . ' ' . $user->last_name;
} else {
    $fullname = '-';
}

Atau menggunakan early return untuk menambah readability kode:

$user = User::where('email', 'foo@example.com')->first();
if (!$user) {
    return '-'
}

return $user->first_name . ' ' . $user->last_name;

Ganti Dengan firstOrFail()

Jika first() dipanggil dari Controller dan kondisinya merupakan input dari user, kita bisa menggantinya dengan firstOrfail.

Contoh, user mencoba mengakses halaman http://localhost/user?email=invalid@example.com:

$user = User::where('email', request('email'))->firstOrFail();

// Kode di bawah ini tidak akan dieksekusi jika email tidak ditemukan, halaman akan menampilkan 404
$fullname = $user->first_name . ' ' . $user->last_name;

Referensi: https://laravel.com/docs/10.x/eloquent#not-found-exceptions

Daftar newsletter yuk!

Kamu akan mendapatkan maksimal 1 email per minggu, berisi kumpulan informasi menarik seputar Laravel, PHP, dan teknologi web pada umumnya.

1000++ web artisan lain telah berlangganan, jangan kudet.