Lanjutan dari postingan sebelumnya, kali ini saya akan coba berbagi pengetahuan tentang cara penerapan relasi database pada Laravel menggunakan Eloquent. Apa itu Eloquent?
Oke, saya kasih dulu daftar isi postingan ini vroh :
Seperti yang telah saya tuliskan pada postingan saya sebelumnya, bahwasanya ada 3 jenis relasi yang telah saya coba jelaskan, diantaranya :
Relasi One-to-One
Relasi One-to-Many
Relasi Many-to-Many
*Sfx : Eloquent apaan woy?
Oke oke, kalo menurut saya Eloquent itu calo. Kenapa calo? Karena melalui eloquent kita bisa berinteraksi secara langsung dengan isi Database. Setiap model eloquent yang kita buat akan bertanggung jawab atas satu tabel dalam database.
Misal, saat ini kita memiliki tabel mahasiswa. Artinya kita akan menciptakan sebuah model baru bernama Mahasiswa yang nantinya akan bertanggung jawab atas isi dari tabel mahasiswa tadi. Bener ngga?
Dengan demikian, bila kita ingin berinteraksi dengan tabel mahasiswa, kita hanya perlu melakukannya melalui model Mahasiswa yang kita buat barusan.
Beneran CALO kalo?
Nah, berhubung saat ini saya akan berbagi mengenai cara penggunaan relasi di Laravel, saya sarankan kalian paham dulu deh tentang ketiga macam relasi yang saya sebut diatas.
Buat kalian yang masih kurang paham atau masih bingung, coba deh baca tulisan saya sebelumnya disini.
Buat yang sudah paham atau nekat nih. Sekarang saya akan coba membuatnya kedalam proyek Laravel. Tentunya dengan menggunakan perumpamaan yang sama dengan postingan saya tentang Penalaran Relasi Database tadi.
Langsung saja, bila dikumpulkan kembali, maka ada 5 buah tabel yang tercipta :
Ya toh? Dan bila digambarkan akan menjadi seperti ini :
Dari semua tabel ini, kita akan coba berkenalan dengan masing-masing relasi. Gambar dibuat menggunakan Pencil.
##Siapkan Laravel
Kita lakukan dengan cepat :
Buat proyek dengan composer create-project laravel/laravel relasi-laravel --prefer-dist
Sediakan database yang akan digunakan dan lakukan konfigurasi di app/config/database.php.
Untuk tahap awal, mari kita berkenalan dengan Relasi One-to-One.
Dari total 5 tabel yang telah ada, ditahap ini kita hanya butuh 2 tabel seperti apa yang ada digambar :
Katakanlah tiap mahasiswa memiliki nama dan nim, sedangkan tiap wali hanya memiliki nama beserta foreign key bernama id_mahasiswa yang nilainya diambil dari id milik tabel mahasiswa.
Untuk id_dosen abaikan dulu.
###- Migration
Pertama-tama kita buat kedua file migration yang dibutuhkan :
####Tabel Mahasiswa
Isi seperti berikut :
####Tabel Wali
Juga isi seperti berikut :
####Migrate
###- Model
Karena alasan tertentu saya sengaja mendahulukan Model ketimbang Seed.
Sekarang coba buat 2 buah model baru didalam direktori app/models/. Dengan nama masing-masing sebagai Mahasiswa dan Wali.
####Model Mahasiswa
####Model Wali
###- Seed
Sekarang mari kita buat file Seeder baru secara manual di direktori app/database/seeds/ dengan nama SeederRelasi.php.
Sekarang kita aktifkan seeder yang akan kita buat tadi melalui app/database/seeds/DatabaseSeeder.php.
Lakukan Seeding dengan php artisan db:seed.
Sejauh ini memang masih terlihat biasa, hanya berhasil ngisi database dan belum ada yang terkesan tujuan sebenarnya dari relasi. Tapi tenang, sebentar lagi kita akan menemukan manfaat dari relasi yang kita buat barusan.
Oke, kalau begitu seharusnya dengan hanya menggunakan model Mahasiswa, saya bisa memanggil data dari tabel wali yang notabene milik model Wali. Karena apa?BENER.
Untuk membuktikannya mari kita lihat cara penerapannya.
###- Route
Proses bermula dari route dengan menyertakan variabel yang isinya mengambil 1 record mahasiswa, lalu route yang sekaligus bertindak sebagai view akan menampilkan nama wali mahasiswa yang dimaksud dengan memanfaatkan relasi yang ada.
Penjelasan untuk return $mahasiswa->wali->nama;:
$mahasiswa berisi 1 record mahasiswa yang diambil berdasarkan ketentuan NIM
wali merupakan function yang ada dalam model Mahasiswa. Coba deh buka model mahasiswa kamu, pasti ketemu maksudnya
nama merupakan field dari tabel wali yang ingin ditampilkan, dalam hal ini bernama nama
Output :
Dengan cara ini, kita bisa menampilkan nama wali dengan hanya memanfaatkan id_mahasiswa yang dihubungkan melalui relasi.
##Penggunaan Relasi One-to-Many
Seperti yang terlihat dalam gambar paling atas, untuk relasi tahap ini kita juga hanya butuh 2 tabel :
Perhatikan kali ini kita akan membuat tabel baru dengan nama dosen dan pastinya tiap dosen memiliki nama dan nipd. Selain itu, kita juga akan menambahkan field baru kedalam tabel mahasiswa dengan nama id_dosen.
###- Migration
Akan terjadi 2 aktifitas disini, pembuatan tabel baru dan penambahan field kedalam tabel yang sudah ada.
####Tabel Dosen Buat Baru
Isi seperti berikut :
####Tabel Mahasiswa Tambah Field
Lalu isi seperti berikut :
####Migrate
###- Model
Karena model mahasiswa sudah ada, maka kita hanya perlu membuat 1 model baru dengan nama Dosen.php. Dan tetap akan melakukan sedikit perubahan serta penambahan pada model Mahasiswa.
####Model Dosen
####Model Mahasiswa Sedikit Perubahan
###- Seed
Sekarang fokus di direktori app/database/seeds/, buka lagi file yang bernama SeederRelasi.php. Dan lakukan perubahan dan penambahan yang diperlukan.
Seeding dan Poofft.
###- Route
Artinya disini kita akan menampilkan data milik tabel dosen melalui model Mahasiswa yang seharusnya hanya bertanggung jawab atas tabel mahasiswa.
Output :
Oke, saya setuju kalau ini kurang lebih sama dengan relasi sebelumnya. Bedanya apaan?
Coba sekarang kita ubah objeknya menjadi Dosen.
Melalui Dosen, kita akan menampilkan semua mahasiswa didikan si dosen yang dimaksud.
Mari buka route kita kembali dan tambahkan baris syntax berikut dibawahnya.
Penjelasan :
Saya menggunakan foreach untuk menampilkan data mahasiswa yang berupa array().
$dosen->mahasiswa maksudnya mengambil semua data mahasiswa milik dosen terkait. Untuk lebih jelasnya, coba deh buka lagi model Dosen kamu. Lalu temukan function mahasiswa disana.
$temp merupakan variabel penampungan nilai sementara
echo ... sebenarnya bagian ini gabungan HTML sama PHP. Ya kamu pasti tau lah…
Output :
##Penggunaan Relasi Many-to-Many
Saatnya berkenalan dengan Many-to-Many. Berikut saya cuplik beberapa kata-kata saya dari postingan sebelumnya.
Berbeda dengan sebelumnya, kita tidak bisa dengan hanya menempatkaniddari salah satu tabel kedalam tabel yang lain.
Untuk relasi jenis ini, kita butuh 1 buah tabel tambahan sebagai perantara(pivot)antara tabelmahasiswadengan tabelhobi.
Kalau begitu artinya kita akan menggunakan 3 tabel pada pembahasan relasi jenis ini :
Dimana id dari tabel mahasiswa beserta id dari tabel hobi akan ditempatkan kedalam tabel mahasiswa_hobi masing-masing sebagai id_mahasiswa dan id_hobi.
###- Migration
Kita sudah punya tabel mahasiswa, jadi kita akan buat 2 tabel lainnya :
####Tabel Hobi
Lalu isi :
####Tabel Mahasiswa_Hobi
Lalu isi seperti berikut :
*Jangan lupa hapus timestampsnya vroh.
####Migrate
###- Model
Terlihat bahwa ada 3 tabel yang terlibat. 2 tabel baru, dan 1 tabel mahasiswa.
Tapi disini, kita hanya akan buatkan model untuk tabel hobi saja, selain itu tabel mahasiswa juga akan mengalami penambahan syntax nantinya. Untuk tabel pivot (perantara) tidak butuh Model.
####Model Hobi Buat Baru
####Model Mahasiswa Tambah Dikit
###- Seed
Buka lagi file Seeder yang ada di direktori app/database/seeds/ bernama SeederRelasi.php. Lalu paste syntax berikut di baris yang telah disediakan.
###- Route
Untuk pembuktian kalau relasi ini tidak sia-sia. Coba ikuti langkah berikut :
Output :
Bukan cuman itu saja, kita juga bisa menampilkan yang sebaliknya. Dimana objek yang akan kita gunakan adalah Hobi. Dan dengan memanfaatkan Hobi kita bisa menapilkan siapa saja yang memiliki Hobi yang dimaksud.
Ini output mereka yang punya hobi mandi hujan :
Gimana menurut kamu?
##Implementasi Lanjutan
Kita telah membahas ketiga jenis relasi serta bagaimana penerapannya dalam Laravel. Sekarang saya akan menampilkan semua dengan hanya memanfaatkan model Mahasiswa. Selain itu, disini juga akan dijelaskan bagaimana agar data yang di kirim ditampilkan di View.
Untuk itu kita butuh 2 hal, mari kita coba :
####Route
Tambahkan bumbu berikut dalam route kalian :
####View
Disini kita akan menggunakan Blade Engine untuk melakukan looping data dan menampilkannya di View. Coba buat file baru di direktori app/views dengan nama eloquent.blade.php.
Sekarang coba deh akses http://localhost:8000/eloquent lalu lihat hasilnya.
##CRUD dengan Eloquent
Saya kasih bonus nih, untuk tahap ini saya akan coba berbagi beberapa hal yang bisa kita gunakan dalam Laravel dengan memanfaatkan Eloquent.
###Create
Untuk Create kita bisa menggunakan beberapa cara sebagai berikut :
Cara pertama diatas sepertinya sudah kita temui di penerapan tutorial diatas.
Cara kedua ini kamu jadikan alternatif, ya walaupun terlihat lebih ribet, sebenarnya tetep memiliki tujuan yang sama kok.
Oh iya, kita juga bisa menggunakan firstOrCreate() atau firstOrNew(). Tapi kedua cara ini jarang banget dipakai. Tapi tak apa lah, sekalian nambah catatan pribadi saya.
###Read
Ada banyak cara untuk memanggil isi tabel dengan menggunakan Eloquent. Berikut beberapa contoh yang bisa kita gunakan :
Mungkin diantara kamu ada yang penasaran dengan first() dan get(). Oke, ringkasnya First hanya akan mengambil data salah satu record yang paling mendekati ketentuan (LIMIT 1). Sedangkan Get akan mengambil banyak record kemudian menampungnya menjadi array yang mengharuskan kamu untuk melakukan Perulangan agar bisa ditampilkan secara utuh.
###Update
Untuk melakukan perubahan data, berarti logikanya pertama-tama kita harus menemukan data yang ingin kita ubah dahulu kan?, setelah ketemu selanjutnya kita siapkan perubahan, sebelum akhirnya kita simpan kedalam database.
Oke, contoh sederhana saat ini kita memiliki tabel mahasiswa, dimana kita akan mengubah NIM milik salah satu mahasiswa. Dengan ketentuan yang tadinya 1015015072 akan diubah menjadi 1015015078.
###Delete
Untuk menghapus record dalam tabel sangatlah mudah, kita bisa menggunakan beberapa cara berikut :
##Kesimpulan
Untuk hari ini saya berkeras kalo Eloquent itu CALO.
Bila kamu mengikuti tutorial ini dengan baik, maka saya pastikan kamu yang sekarang bukanlah kamu yang dulu lagi. Ngahahaha… Skip skip. Sekarang kamu pasti bisa menerapkan relasi dalam Laravel sendiri.
Kembali lagi ke saya, mungkin saja banyak teori yang berbeda dari apa yang saya sampaikan, tapi tujuannya sama kok. :3
Oke, saya kupas kembali beberapa poin penting dari postingan hari ini :
Diatas hanya dijelaskan 3 jenis relasi. Padahal sebenarnya masih ada yang lainnya. Cacat nih yang punya blog.
Pembahasannya acak adut nyampur sana sini. Oke, maaf