Cara menggunakan php get property name

Halo semua nya, sering sekali kita menemukan error seperti diatas, “trying to get property of non-object”..

Ini adalah error sejuta umat yang memang sering sekali muncul ketika kita sedang mendevelop sebuah aplikasi..

Bagi para senior programmer mungkin sudah sangat terbiasa sekali dengan error seperti ini, tapi bagi para programmer junior, mungkin akan kesulitan kenapa error ini sering muncul, apa penyebab nya, dan bagaimana solusi nya?

Mari kita bahas..

Daftar Isi

Penyebab error tersebut

Untuk penyebab dari error tersebut sebetulnya bisa terjadi karena beberapa hal:

1. Karena data yang dipassing memang bukan object

Penyabab yang pertama yaitu karena memang data tersebut bukanlah dalam bentuk objek, melainkan dalam bentuk yang lain, anggap saja misal dalam bentuk array..

Misalkan sebagai contoh, kalian memiliki sebuah data array seperti berikut:

....
$data = [
    'jenis' => 'kucing',
    'suara' => 'meong',
    'warna' => 'hitam',
    'jumlah' => 2,
    'makanan' => 'ikan'
];
....

Kemudian kalian memanggil variable tersebut dengan memperlakukan nya seolah-olah data tersebut adalah object dengan cara seperti ini:

Trending

Tutorial Lengkap Integrasi Laravel Dengan Payment Gateway Xendit

....
echo $data->jenis;
....

Maka pastinya akan muncul error trying to get property of non-object.. Karena data tersebut memang bukanlah object, melainkan data array..

Kalian seharusnya memanggil dengan cara seperti berikut:

....
echo $data['jenis'];
....

2. Karena data tersebut sudah hilang dari database

Kemudian penyebab selanjutnya adalah karena data yang ingin kita tarik, ternyata sudah tidak ada di database..

Anggap saja kita memiliki sebuah table products dengan isi seperti berikut:

Cara menggunakan php get property name
Cara menggunakan php get property name

kemudian kita melakukan query select data terhadap table tersebut seperti ini:

....
$product = Product::where('id', 2)->first();
$name = $product->name;
echo $name;
...

Jika kita mengeksekusi perintah diatas, maka akan memuncul error trying to get property of non-object..

Kenapa? Karena kita menarik data product yang id nya adalah 2, sementara didalam table products tersebut, data yang id nya 2 tidak ada..

Maka ketika kita mengeksekusi syntax “$product = Product::where(‘id’, 2)->first();” , maka akan memberikan nilai null pada variabel $product..

Karena nilai null adalah bukan object, maka ketika kita memanggil atribut name dengan perintah “$name = $product->name;”, akan menghasilkan error trying to get property of non-object..

3. Ada data relasi yang hilang

Sebetulnya point ini sama seperti point yang sebelumnya, hanya saja disini yang hilang adalah data pada relasi table nya..

Misalkan kalian memiliki sebuah struktur data relation yang seperti berikut ini:

Cara menggunakan php get property name
Cara menggunakan php get property name

Coba kalian perhatikan gambar diatas, table products berelasi dengan table categories..

Ada 1 permasalahan yang perlu kalian ketahui, yaitu didalam table products, pada id ke-6, name kaleng, memiliki category_id dengan nilai 3..

Sementara pada table categories, data dengan id 3 tidak ada..

Kalau nanti kalian mengakses data relation nya, misal dengan laravel eloquent relationship seperti berikut:

....
$product = Product::where('id',6)->first();
$category_name = $product->category->name;
echo $category_name;
....

Maka akan memunculkan error trying to get property of non-object..

Solusi mengatasi error tersebut

Agar error tersebut tidak muncul lagi, ada beberapa hal yang bisa kita lakukan..

Baca juga: Backup Database Otomatis Tiap Malam Dengan Laravel Spatie Backup

1. Menggunakan Null Coalescing Operator

Di php, ada fitur yang nama nya Null Coalescing Operator..

Dengan fitur tersebut, kita bisa mengecek apakah sebuah data ada atau tidak, dan juga apakah data tersebut isinya null atau bukan..

Cara penggunaan nya yaitu dengan menggunakan keyword ?? (tanda tanya 2 kali)..

Untuk contoh kodingan nya adalah seperti berikut:

....
$product = Product::where('id', 7)->first();
$name_product = $product->name ?? '-';
echo $name_product;
....

Pada script diatas, kita melakukan sebuah query dengan menarik sebuah data product yang id nya adalah 7..

Kemudian kita membuat sebuah variable $name_product untuk menampung nama dari data product nya, kemudian di print dengan menggunakan perintah echo..

Nah, jika data tersebut ada, product dengan id 7 memang bener ada di database, maka sistem akan menampilkan nama product tersebut..

Tapi jika data product dengan id 7 tidak ada, maka sistem akan menampilkan sebuah string strip “-“..

Kalian perhatikan di baris ke-3 pada script diatas, kita memberikan sebuah nilai alternatif saat memanggil atribut name, nilai alternatif yang kita berikan yaitu berupa string ‘-‘ (strip)..

Jadi bisa dibilang dengan fitur Null Coalescing Operator, kita bisa memberikan nilai alternatif terhadap data yang ingin kita tarik..

Jika data yang ingin kita tarik tidak ada atau bernilai null, maka sistem akan membaca nilai alternatif nya..

2. Jangan lupakan withDefault()

Solusi yang kedua ini adalah khusus untuk kalian pengguna framework Laravel..

Pada saat kita membuat method relationship, kita bisa membuat sebuah default model dengan menggunakan kata kunci withDefault() dan akan memberikan nilai null sebagai nilai default nya..

Untuk contoh penggunaan nya, bisa kalian lihat seperti dibawah ini:

....
class Product extends Model
{
    ....
    public function category()
    {
        return $this->belongsTo(Category::class, 'category_id')->withDefault();
    }
}
....

Diatas adalah contoh pembuatan relationship pada model Product ke table categories menggunakan belongsTo dan kita juga menambahkan function withDefault() dibelakang nya..

Yang artinya pada table products memiliki sebuah field dengan nama category_id dan berelasi kedalam table categories..

Untuk menjalankan method relationship nya, maka biasanya kita seperti ini, misalkan kita ingin memanggil nama kategori dari sebuah product tertentu:

....
$category_name = $pd->category->name;
....

Perintah diatas akan menghasilkan nama dari kategori nya..

Tapi jika ternyata data pada table relationship nya kosong, atau ternyata data kategori untuk produk tersebut hilang, maka akan mengembalikan nilai null..

Itulah fungsi dari perintah withDefault(), jika tidak menggunakan withDefault(), pasti akan muncul error trying to get property of non-object..

Kalian juga bisa mengcustom return nilai nya dengan mempassing sebuah array kedalam method withDefault nya, contoh:

....
public function category()
{
    return $this->belongsTo(Category::class, 'category_id')->withDefault([
        'name' => 'name not found'
    ]);
}
....

Maka nanti kalau datanya tidak ada, akan mereturn sebuah string “name not found”..

Perlu kalian ingat, tidak semua relationship bisa dipasangi method withDefault(), yang bisa hanya belongsTo, hasOne, hasOneThrough, dan morphOne.

3. Menggunakan Null-Safe Operator

Cara ketiga yaitu dengan menggunakan Null-Safe Operator..

Tapi fitur ini mulai ada pada php versi 8.0, bagi kalian yang versi php nya masih dibawah 8, belum bisa menggunakan fitur ini..

Dengan fitur ini, kita bisa menghindari error sejuta umat ini hanya dengan menambahkan sebuah operator “?->”..

Contoh penggunaan nya adalah seperti berikut:

....
$product = Product::where('id', 7)->first();
$name_product = $product?->name;
echo $name_product;
....

Pada script diatas, jika data product dengan id 7 tidak ditemukan, maka isi dari variable $name_product akan bernilai null..

Contoh jika pemanggilan pada relation eloquent:

....
echo $data->jenis;
....
0

Pada kode diatas, kita memanggil nama kategori yang berelasi ke table product..

Jika ternyata data kategori nya tidak ada, maka kode diatas tidak akan menghasilkan error, tapi akan menghasilkan nilai null..

Support Us

Jika artikel ini bermanfaat untuk kamu, membantu menyelesaikan masalah yang sedang kamu hadapi, kamu juga bisa dukung kami dengan mengunjungi halaman berikut: https://saweria.co/sangcahayaid