Tampilkan postingan dengan label laravel. Tampilkan semua postingan
Tampilkan postingan dengan label laravel. Tampilkan semua postingan

Sabtu, 18 Mei 2019

Laravel : Cara Memanggil Controller ke View Tanpa Menggunakan Route


Apakah mungkin kita bisa memanggil fungsi controller ke view di laravel tanpa menggunakan route. Biasanya pada konsep MVC (Model-View-Controller) di laravel, Controller adalah penghubung antara model sebagai pattern atau pola yang menandakan sebagai objek dari database dan view sebagai tampilannya yang diakses menggunakan route. Lalu bagaimana kalau Controller itu sendiri kita jadikan suatu fungsi atau method yang dapat dipanggil ke view, emang bisa ? jawabannya bisa karena pada dasarnya Controller yang ada di laravel itu merupakan kelas kelas yang berisi fungsi atau method yang dapat dipanggil, tetapi perlu diingat ketika fungsi atau mehod yang dibuat dapat dikatakan sebagai Controller jika isinya merupakan penghubung antara Model dan View seperti membuat variabel dari Model kemudian dilempar ke View. Ketika hanya berisi fungsi yang memiliki nilai dia tidak bisa disebut Controller. Biasanya untuk apa sih ? kok bisa bisanya fungsi di Controller dipanggil ke View, kan bisa pke variabel kemudian dilempar. Bagi yang pernah atau fasih memakai laravel solusi ini dipakai pada kasus ketika kita melooping variabel kemudian kita ingin mendapatkan detailnya dari database mau gak mau kita harus membuat query lagi (asumsi : tidak bisa join) di view dengan parameter hasil loopingan yang pertama itu membuat terjadi perulangan dua kali, itu sangat tidak bagus walaupun sangat bisa untuk dilakukan, nah pusing kan ? langsung aja ini caranya :









Kamis, 21 Februari 2019

Laravel : Membuat Custom Model Sendiri (Kombinasi atau Tanpa Eloquent)

laravel membuat custom model sendiri

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) :

1. Membuat Folder dan Class Untuk Model

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}.

contoh membuat folder dan class model laravel tanpa eloquent



2. Membuat Syntax Pada Class Model


Contoh syntax seperti gambar dibawah, yang perlu dperhatikan adalah :
  1. 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.
  2. 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.
  3. 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.
  4. 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();



contoh membuat model laravel tanpa eloquent


2. Memanggil Custom Model Lewat Controller
  1. 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
  2. Untuk memanggilnya kita hanya perlu memanggil {nama_class}::{nama_method} kalau pada kasus diatas proses pemanggilannya m_ibadah::getAllIbadah()
  3. Tanda (::) digunakan seperti halnya dot (.) pada java atau .net untuk memanggil turunan dari class tersebut 
  4. nama method bisa langsung dipangil setelah penulisan class tanpa membuat objek terlebih dahulu karena pada pembahasan diatas kita membuat methodnya dalam bentuk static 
  5. 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');

membuat-custom-model-sendiri-tanpa-atau-kombinasi-eloquent

3. Hasil
  1. Jalankan browser dengan mengetik link (localhost:8000/showibadah) karena saya menggunakan composer untuk menjalankan artisan laravelnya maka saya menggunakan port 8000
  2. Walahh.... Hasilnya terlihat seperti dibawah ini
hasil model tanpa menggunakan eloquent

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. 

membuat folder dan class baru dengan eloquent

2. Membuat Syntax Pada Class Model

Contoh syntax seperti gambar dibawah, yang perlu dperhatikan adalah :
  1. 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.
  2. 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.
  3. 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.
  4. 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
  5. 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.


2. Memanggil Custom Model Lewat Controller
  1. Masuk ke conttroler c_ibadah (optional) yang sudah kamu buat tadi kemudian buat satu function dengan nama public function dengan nama showwitheloquent (optional) 
  2. Untuk memanggilnya sama seperti tadi kita hanya perlu memanggil {nama_class}:{nama_method} contoh m_ibadah_eloquent::getSpesificIbadah($parameter).
  3. 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').
3. Hasil
  1. Jalankan browser dengan mengetik link (localhost:8000/showibadah) karena saya menggunakan composer untuk menjalankan artisan laravelnya maka saya menggunakan port 8000
  2. Walahh.... Hasilnya terlihat seperti dibawah ini.
hasil model dengan kombinasi eloquent

Referensi :

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