Untuk membuat model pada framework laravel biasanya kita biasa menggunakan bawaan yang telah disediakan oleh laravel yaitu Eloquent, mengadaptasi pada metode ORM (Object Relational Mapping) yang digunakan untuk mengakses database dalam ruang lingkup sebagai objek. Tentu saja dengan adanya Eloquent ini kita lebih dimudahkan untuk membuat query langsung pada code kita, namun bagaimana kalo kita biasa menggunakan SQL untuk mengakses database atau kita kesulitan untuk merubah SQL syntax yang kompleks ke query builder dari Eloquent itu sendiri. Untuk masalah tersebut kita bisa membuat custom model sendiri dengan membuat class yang berisi fungsi (method) SQL yang mengakses database tanpa menggunakan Eloquent atau kita bisa kombinasikan diantara keduanya. Berikut langkah - langkahnya (jika tanpa eloquent) :
Pastikan koneksi ke database anda sudah benar (lihat di file .env). Lalu buat sebuah folder dengan nama Model (optional) dan buat satu file class php (nama_optional). Saya biasanya menamakan sebuah class diawali dari inisial untuk menandakan file ini bekerja di pattern (pola) yang mana, misal dengan pola MVC (Model, View, Controller) untuk model saya kasih inisial m_{nama model}, untuk controller c_{nama controller} dan view v_{nama view}.
2. Membuat Syntax Pada Class Model
Contoh syntax seperti gambar dibawah, yang perlu dperhatikan adalah :
- Penulisan direktori namespace, karena tadi kita buat classnya di dalam folder App dan Model jadi penulisannya App\Model jika diletakan dalam App saja maka penulisannya hanya namespace App. Karena kalo dari sini sudah salah maka tidak bisa diakses di controller.
- Penulisan use, penggunaan syntax use digunakan untuk mengakses library yang ada di laravel, Karena kita butuhnya untuk mengakses database tanpa eloquent jadi kita ambil library DB.
- Penamaan class, pastikan nama class sama dengan nama file php yang kita buat dan karena kita tidak menggunakan eloquent tidak harus menambahkan extend model setelah nama class.
- Penulisan fungsi (method), pada penulisan method tersebut ada kata public agar class bisa dipanggil di semua class termasuk controller maupun view, static agar fungsi dapat dipanggil langsung terhadap classnya tanpa pembuatan objek baru misal {nama_kelas}::{nama_fungsi}, return adalah nilai akhir yang dihasilkan dari fungsi tersebut. untuk penulisan query pada library DB kita bisa juga menggunakan query builder dari library DB tersebut contoh return DB::table('jenis_ibadah')->get();
- Buat satu controller dengan nama c_ibadah dan jangan lupa untuk mengimport clas custom model yang tadi sudah kita bikin dengan mengisi syntax use App/Model/m_ibadah
- Untuk memanggilnya kita hanya perlu memanggil {nama_class}::{nama_method} kalau pada kasus diatas proses pemanggilannya m_ibadah::getAllIbadah()
- Tanda (::) digunakan seperti halnya dot (.) pada java atau .net untuk memanggil turunan dari class tersebut
- nama method bisa langsung dipangil setelah penulisan class tanpa membuat objek terlebih dahulu karena pada pembahasan diatas kita membuat methodnya dalam bentuk static
- Karena saya tidak membuat view maka untuk melihat tampilannya berhasil atau tidak saya render dalam bentuk json dan jangan lupa untuk mendeklarasikan routenya di routes/web.php dengan menulis Route::get('/showibadah', 'c_ibadah@show');
3. Hasil
- Jalankan browser dengan mengetik link (localhost:8000/showibadah) karena saya menggunakan composer untuk menjalankan artisan laravelnya maka saya menggunakan port 8000
- Walahh.... Hasilnya terlihat seperti dibawah ini
Bagaimana jika kita kombinasikan dengan eloquent
1. Membuat Class Untuk Model
Buat kelas baru dengan nama optional untuk memisahkan antara kelas model yang dikombinasikan dengan Eloquent dan tidak menggunakan Eloquent. Disini saya membuat kelas baru dengan nama m_ibadah_eloquent.
2. Membuat Syntax Pada Class Model
Contoh syntax seperti gambar dibawah, yang perlu dperhatikan adalah :
- Penulisan direktori namespace, karena tadi kita buat classnya di dalam folder App dan Model jadi penulisannya App\Model jika diletakan dalam App saja maka penulisannya hanya namespace App. Karena kalo dari sini sudah salah maka tidak bisa diakses di controller.
- Penulisan use, penggunaan syntax use digunakan untuk mengakses library yang ada di laravel, Karena kita butuhnya untuk mengakses database dengan eloquent jadi kita ambil library Illuminate\Database\Eloquent\Model.
- Penamaan class, pastikan nama class sama dengan nama file php yang kita buat dan karena kita menggunakan eloquent jadi harus menambahkan extend model setelah nama class.
- Penulisan Atrribut Eloquent, kalian yang biasa menggunakan eloquent pastinya udah tau kan cara menuliskan attributnya diawali dengan protected {nama_attribut} bisa kalian pake seuai kebutuhan seperti $table, $primary_key, $fillable, $guarded dan lain-lain kalian bisa liat dokumen tasinya disini link. Dalam kasus ini saya menggunakan $table untuk menetukan tabel yang mana yang ingin dijadikan target dan $primary_key untuk menentukan target kolom mana sebagai primary key
- Penulisan fungsi (method), pada penulisan method tersebut ada kata public agar class bisa dipanggil di semua class termasuk controller maupun view, static agar fungsi dapat dipanggil langsung terhadap classnya tanpa pembuatan objek baru misal {nama_kelas}::{nama_fungsi}, return adalah nilai akhir yang dihasilkan dari fungsi tersebut. untuk penulisan library eloquent kalian bisa menggunakan fungsi - fungsi yang telah disediakan oleh eloquent untuk diakases seperti all(), where(), count(), max(), min() dan lain - lain kalian bisa lihat dokumentasinya disini link. dalam kasus ini saya membuat fungsi dengan nama getSpesificIbadah dengan parameter $id_ibadah, fungsi eloquent yang digunakan where untuk mencari daftar ibadah dengan id_ibadah tertentu.
- Masuk ke conttroler c_ibadah (optional) yang sudah kamu buat tadi kemudian buat satu function dengan nama public function dengan nama showwitheloquent (optional)
- Untuk memanggilnya sama seperti tadi kita hanya perlu memanggil {nama_class}:{nama_method} contoh m_ibadah_eloquent::getSpesificIbadah($parameter).
- Karena saya tidak membuat view maka untuk melihat tampilannya berhasil atau tidak saya render dalam bentuk json dan jangan lupa untuk mendeklarasikan routenya di routes/web.php dengan menulis Route::get('/showwitheloquent', 'c_ibadah@showwitheloquent').
- Jalankan browser dengan mengetik link (localhost:8000/showibadah) karena saya menggunakan composer untuk menjalankan artisan laravelnya maka saya menggunakan port 8000
- Walahh.... Hasilnya terlihat seperti dibawah ini.
https://stackoverflow.com/questions/23658479/laravel-custom-model-methods
https://laracasts.com/discuss/channels/laravel/how-can-i-use-db-facade-in-my-custom-class
Tidak ada komentar:
Posting Komentar