Eloquent merupakan salah satu fitur Laravel yang dapat dimanfaatkan untuk mengakses dan memanipulasi data yang tersimpan di dalam database dengan perintah yang lebih singkat dan mempercepat proses pembuatan CRUD dari database.
Eloquent vs Query Builder
Eloquent merupakan Active Record Implementation pada Laravel. dan digunakan sebagai Model. Salah satu contoh penggunaannya adalah apabila dibutuhkan untuk membuat sistem CRUD tentang buku maka harus disiapkan tabel pada database dan membuat Model untuk proses CRUDnya.
Laravel juga menyediakan Query Builder yang dapat dimanfaatkan untuk melakukan pengaksesan data yang bersifat kompleks. Penggunaan Eloquent untuk hal yang bersifat umum lebih membantu pemrogram untuk dapat menyelesaikan pembuatan program dengan lebih cepat.
Memanfaatkan Eloquent
Proses untuk membuat Model dan kemudian dilanjutkan dengan pemanfaatan Eloquent.
Mendefinisikan Model
- Konfigurasi Model
- Secara default, model terletak di folder /app
- Model ini dapat diubah dengan menambahkan konfigurasi di file /composer.json
- Contoh memindahkan model ke folder Models:
- Semua Eloquent Model merupakan turunan dari:
Illuminate\Database\Eloquent\Model
Membuat Model dengan Artisan
- Perintah untuk membuat model dengan Artisan adalah sebagai berikut:
- Untuk membuat model dengan sekaligus database migration terkait:
- Berikut adalah contohModel yang dihasilkan:
Nama Tabel
- Nama tabel database akan dibuat menyesuaikan dengan nama Model yang digenerate dengan Artisan
- Berdasarkan konvensi, nama Model merupakan kata singular diawali huruf besar, misalnya: Car
- Adapun table yang dihasilkan dari proses migrations diberi nama plural dengan huruf kecil, dimana untuk nama model Car akan dihasilkan table dengan nama cars
- Apabila diinginkan nama tabel tertentu yang tidak merupakan nama default, contohnya my_cars dapat diganti dengan cara berikut:
Primary Keys Table
- Default primary key adalah id, cara mengubah:
- Default primary key adalah auto increment, untuk mengubah menjadi tidak auto increment:
- Default primary key adalah integer, untuk mengubah:
Timestamps
- Secara default, pada model akan dibuatkan 2 field: created_at dan updated_at
- Apabila tidak diinginkan timestamps:
- Mengganti nama field:
Default Values
- Default value dari variable dapat ditentukan, misalnya memberikan nilai default false pada field sunroofdengan cara berikut:
Mengambil Data Model
- Menggunakan SQL Query
- Data dapat diambil dengan menggunakan perintah Eloquent atau dengan menggunakan DB Library:
use DB;
- Data dapat diambil dengan menggunakan perintah Eloquent atau dengan menggunakan DB Library:
- Contoh penggunaan:
$posts = DB::select(‘SELECT * FROM posts’);
- Mengambil data dengan Eloquent
- Perintah berikut adalah mengambil semua data dengan method all() dari Model Car pada namespace App dan disimpan dalam variabel $cars. Hasilnya diambil satu persatu dengan perintah foreach dan setiap hasil disimpan dalam variable $car
- Menambah Ketentuan
Contoh berikut adalah mengambil data Car yang sedang dijual (onsale = 1) sebanyak 10 buah berdasarkan urutan merek/brand dengan urutan huruf kecil ke besar (asc). Perintah diakhiri ->get().
- Mengambil Ulang Data: Fresh
Untuk mengambil ulang data dengan ketentuan yang sama, dapat dilakukan dengan perintah ->fresh(). Pada contoh berikut, data pertama yang merek Toyota diambil dan disimpan dalam variable $car. Perintah berikutnya mengambil data baru dengan menggunakan ->fresh() dan disimpan di variabel $freshCar. Isi $car tidak berubah.
- Mengambil Ulang Data: Refresh
Mengambil ulang dapat dilakukan pula dengan menggunakan Refresh, dimana data akan dikembalikan semula.
- Collection Methods
Hasil dari perintah all() dan get() pada Eloquent adalah berupa Collection.
Laravel menyediakan banyak methods yang dapat dipergunakan pada Collection, silahkan check dokumentasinya pada:
https://laravel.com/docs/5.7/eloquent-collections#available-methods
- Membagi Data Besar
Apabila data yang terdapat di tabel database berjumlah banyak, sebaiknya dipergunakan fitur chunk (potongan) sebagai berikut:
Pada contoh tersebut data akan diambil per 200 record. Fungsi ini berfungsi untuk mengomptimalkan penggunaan memory
- Penggunaan Cursor
Cursor juga dapat dipergunakan untuk penghematan memory, dimana data diambil per record:
- Mengambil Data dengan Find
Berikut adalah perintah mengambil data sesuai dengan primary key table, misalnya untuk mengambil data dengan nilai primary key = 10:
- Mengambil Data Pertama
Mengambil data pertama yang sesuai dengan kriteria:
- Lebih dari 1 data dengan Find
Perintah find juga dapat dipergunakan untuk mengambil lebih dari 1 data berupa collection. Pada contoh berikut perintah ini dipergunakan untuk mengambil data dengan primary key 10, 12, dan 19:
- Not Found Exception
Apabila ingin menghasilkan exception untuk ditangani apabila model tidak diketemukan, dapat dipergunakan findOrFail() atau firstOrFail() contoh potongan program:
- Exception yang dihasilkan:
Illuminate\Database\Eloquent\ModelNotFoundException
- Menangani Exception
- Tambahkan class:
use Illuminate\Database\Eloquent\ModelNotFoundException; - Gunakan try/catch:
- Tambahkan class:
- Data Aggregate
Eloquent juga menyediakan method aggregate seperti: count, max, min, avg, dan sum.
Berikut adalah contoh penggunaan method aggregate:
Pada contoh diatas method count() dipergunakan untuk menghitung jumlah record atau data yang dihasilkan, sedangkan method max() digunakan untuk mengambil nilai tertinggi dari field price