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 :
- Pendahuluan
- Siapkan Laravel
- Penggunaan Relasi One-to-One
- Penggunaan Relasi One-to-Many
- Penggunaan Relasi Many-to-Many
- Implementasi Lanjutan
- CRUD dengan Eloquent
- Kesimpulan
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 :
- mahasiswa
- wali
- dosen
- hobi
- mahasiswa_hobi
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.
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
.
Bingung? Berarti kamu belum baca ini.
##Penggunaan Relasi One-to-One
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 :
- mahasiswa
- wali
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
php artisan migrate:make buat_tabel_mahasiswa --create=mahasiswa
Isi seperti berikut :
// app/database/migrations/####_##_##_######_buat_tabel_mahasiswa.php
<?php
...
Schema::create('mahasiswa', function(Blueprint $table)
{
$table->increments('id');
$table->string('nama');
$table->string('nim');
$table->timestamps();
});
...
?>
####Tabel Wali
php artisan migrate:make buat_tabel_wali --create=wali
Juga isi seperti berikut :
// app/database/migrations/####_##_##_######_buat_tabel_wali.php
<?php
...
Schema::create('wali', function(Blueprint $table)
{
$table->increments('id');
$table->string('nama');
$table->unsignedInteger('id_mahasiswa');
$table->foreign('id_mahasiswa')->references('id')->on('mahasiswa')->onDelete('CASCADE');
$table->timestamps();
});
...
?>
####Migrate
php artisan 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
// app/models/Mahasiswa.php
<?php
# Sesuaikan nama class dengan nama file yang dibuat
class Mahasiswa extends Eloquent {
# Tentukan nama tabel terkait
protected $table = 'mahasiswa';
# MASS ASSIGNMENT
# Untuk membatasi attribut yang boleh di isi (Untuk keamanan)
protected $fillable = array('nama', 'nim');
/*
* Relasi One-to-One
* =================
* Buat function bernama wali(), dimana model 'Mahasiswa' memiliki relasi One-to-One
* terhadap model 'Wali' sebagai 'id_mahasiswa'
*/
public function wali() {
return $this->hasOne('Wali', 'id_mahasiswa');
}
# Relasi One-to-Many nanti disini...
# Relasi Many-to-Many nanti disini...
}
?>
####Model Wali
// app/models/Wali.php
<?php
# Sesuaikan nama class dengan nama file yang dibuat
class Wali extends Eloquent {
# Tentukan nama tabel terkait
protected $table = 'wali';
# MASS ASSIGNMENT
# Untuk membatasi attribut yang boleh di isi (Untuk keamanan)
protected $fillable = array('nama', 'id_mahasiswa');
/*
* Relasi One-to-One
* =================
* Sebaliknya, buat function bernama mahasiswa(), dimana model 'Wali' memiliki relasi One-to-One (belongsTo)
* sebagai timbal balik terhadap model 'Mahasiswa'
*/
public function mahasiswa() {
return $this->belongsTo('Mahasiswa', 'id_mahasiswa');
}
}
?>
###- Seed
Sekarang mari kita buat file Seeder
baru secara manual di direktori app/database/seeds/
dengan nama SeederRelasi.php
.
// app/database/seeds/SeederRelasi.php
<?php
# Sesuaikan nama class dengan nama file yang dibuat
class SeederRelasi extends Seeder {
public function run() {
# Kosongin isi tabel
DB::table('mahasiswa')->delete();
DB::table('wali')->delete();
/***********************************
*** SIAPKAN SEEDER DOSEN DISINI ***
***********************************/
//
/* Kita akan membuat 3 orang mahasiswa sebagai sampel
* Disinilah alasan kenapa saya membuat model terlebih dahulu
* Karena saya memanfaatkan model untuk mengcreate record
*/
# Mahasiswa Pertama bernama Noviyanto Rachmadi. Dengan NIM 1015015072.
$novay = Mahasiswa::create(array(
'nama' => 'Noviyanto Rachmadi',
'nim' => '1015015072'));
# Mahasiswa Kedua bernama Djaffar. Dengan NIM 1015015088.
$dije = Mahasiswa::create(array(
'nama' => 'Djaffar',
'nim' => '1015015088'));
# Mahasiswa Ketiga bernama Puji Rahayu. Dengan NIM 1015015078.
$ayu = Mahasiswa::create(array(
'nama' => 'Puji Rahayu',
'nim' => '1015015078'));
# Informasi ketika mahasiswa telah diisi.
$this->command->info('Mahasiswa telah diisi!');
/*
* Disini kita akan menggunakan ketiga variabel yang kita
* deklarasikan diatas yaitu '$novay', '$dije', '$ayu'
* dengan cara mengambil id dari masing-masing variabel yang
* baru saja di isi.
*/
# Ciptakan wali si $novay
Wali::create(array(
'nama' => 'Achmad S',
'id_mahasiswa' => $novay->id
));
# Ciptakan wali si $dije
Wali::create(array(
'nama' => 'Entahlah',
'id_mahasiswa' => $dije->id
));
# Ciptakan wali si $ayu
Wali::create(array(
'nama' => 'Arianto',
'id_mahasiswa' => $ayu->id
));
# Informasi ketika semua wali telah diisi.
$this->command->info('Data mahasiswa dan wali telah diisi!');
/***********************************
*** SIAPKAN SEEDER HOBI DISINI ***
***********************************/
//
}
}
?>
Sekarang kita aktifkan seeder yang akan kita buat tadi melalui app/database/seeds/DatabaseSeeder.php
.
// app/database/seeds/DatabaseSeeder.php
<?php
class DatabaseSeeder extends Seeder {
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Eloquent::unguard();
// $this->call('UserTableSeeder');
# Kita akan beri nama Seeder dengan 'SeederRelasi'
$this->call('SeederRelasi');
# Tampilkan informasi berikut bila Seeder telah dilakukan
$this->command->info('SeederRelasi berhasil.');
}
}
?>
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.
// app/routes.php
<?php
# URL localhost:8000/relasi-1/
Route::get('relasi-1', function() {
# Temukan mahasiswa dengan NIM 1015015072
$mahasiswa = Mahasiswa::where('nim', '=', '1015015072')->first();
# Tampilkan nama wali mahasiswa
return $mahasiswa->wali->nama;
});
?>
Penjelasan untuk return $mahasiswa->wali->nama;
:
$mahasiswa
berisi 1 record mahasiswa yang diambil berdasarkan ketentuan NIMwali
merupakan function yang ada dalam model Mahasiswa. Coba deh buka model mahasiswa kamu, pasti ketemu maksudnyanama
merupakan field dari tabel wali yang ingin ditampilkan, dalam hal ini bernamanama
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 :
- mahasiswa
- dosen
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
php artisan migrate:make buat_tabel_dosen --create=dosen
Isi seperti berikut :
// app/database/migrations/####_##_##_######_buat_tabel_dosen.php
<?php
...
Schema::create('dosen', function(Blueprint $table)
{
$table->increments('id');
$table->string('nama');
$table->string('nipd');
$table->timestamps();
});
...
?>
####Tabel Mahasiswa Tambah Field
php artisan migrate:make tambah_field_mahasiswa
Lalu isi seperti berikut :
// app/database/migrations/####_##_##_######_tambah_field_mahasiswa.php
<?php
...
public function up() {
Schema::table('mahasiswa', function($table) {
$table->unsignedInteger('id_dosen')->after('nim')->nullable();
$table->foreign('id_dosen')->references('id')->on('dosen')->onDelete('CASCADE');
});
}
...
public function down() {
Schema::table('mahasiswa', function($table) {
$table->dropColumn('id_dosen');
});
}
...
?>
####Migrate
php artisan migrate:refresh
###- 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
// app/models/Dosen.php
<?php
# Sesuaikan nama class dengan nama file yang dibuat
class Dosen extends Eloquent {
# Tentukan nama tabel terkait
protected $table = 'dosen';
# MASS ASSIGNMENT
# Untuk membatasi attribut yang boleh di isi (Untuk keamanan)
protected $fillable = array('nama', 'nipd');
/*
* Relasi One-to-Many
* ==================
* Buat function bernama mahasiswa(), dimana model 'Dosen' akan memiliki
* relasi One-to-Many terhadap model 'Mahasiswa' sebagai 'id_dosen'
*/
public function mahasiswa() {
return $this->hasMany('Mahasiswa', 'id_dosen');
}
}
?>
####Model Mahasiswa Sedikit Perubahan
// app/models/Mahasiswa.php
<?php
...
# Tambahkan 'id_dosen' disini
protected $fillable = array('nama', 'nim', 'id_dosen');
...
# Tambahkan baris berikut setelah relasi One-to-One, (BUKAN DIGANTI!)
/*
* Relasi One-to-Many
* =================
* Buat function bernama dosen(), dimana model 'Mahasiswa' memiliki
* relasi One-to-Many (belongsTo) sebagai penerima 'id_dosen'
*/
public function dosen() {
return $this->belongsTo('Dosen', 'id_dosen');
}
# Relasi Many-to-Many nanti disini...
...
?>
###- Seed
Sekarang fokus di direktori app/database/seeds/
, buka lagi file yang bernama SeederRelasi.php
. Dan lakukan perubahan dan penambahan yang diperlukan.
// app/database/seeds/SeederRelasi.php
<?php
# Sesuaikan nama class dengan nama file yang dibuat
class SeederRelasi extends Seeder {
public function run() {
# Kosongin isi tabel
DB::table('mahasiswa')->delete();
DB::table('wali')->delete();
/***********************************
*** SIAPKAN SEEDER DOSEN DISINI ***
***********************************/
DB::table('dosen')->delete();
# Tambahkan data dosen
$dosen = Dosen::create(array(
'nama' => 'Yulianto',
'nipd' => '1234567890'));
$this->command->info('Data dosen telah diisi!');
# Kemudian tambahkan nilai id_dosen ditiap record mahasiswa
/* Kita akan membuat 3 orang mahasiswa sebagai sampel
* Disinilah alasan kenapa saya membuat model terlebih dahulu
* Karena saya memanfaatkan model untuk mengcreate record
*/
# Mahasiswa Pertama bernama Noviyanto Rachmadi. Dengan NIM 1015015072.
$novay = Mahasiswa::create(array(
'nama' => 'Noviyanto Rachmadi',
'nim' => '1015015072',
'id_dosen' => $dosen->id));
# Mahasiswa Kedua bernama Djaffar. Dengan NIM 1015015088.
$dije = Mahasiswa::create(array(
'nama' => 'Djaffar',
'nim' => '1015015088',
'id_dosen' => $dosen->id));
# Mahasiswa Ketiga bernama Puji Rahayu. Dengan NIM 1015015078.
$ayu = Mahasiswa::create(array(
'nama' => 'Puji Rahayu',
'nim' => '1015015078',
'id_dosen' => $dosen->id));
# Informasi ketika mahasiswa telah diisi.
$this->command->info('Mahasiswa telah diisi!');
...
}
}
?>
Seeding dan Poofft.
###- Route
Artinya disini kita akan menampilkan data milik tabel dosen
melalui model Mahasiswa
yang seharusnya hanya bertanggung jawab atas tabel mahasiswa
.
// app/routes.php
<?php
...
# URL localhost:8000/relasi-2/
Route::get('relasi-2', function() {
# Temukan mahasiswa dengan NIM 1015015072
$mahasiswa = Mahasiswa::where('nim', '=', '1015015072')->first();
# Tampilkan nama dosen pembimbing
return $mahasiswa->dosen->nama;
});
?>
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.
// app/routes.php
<?php
...
# URL localhost:8000/relasi-3/
Route::get('relasi-3', function() {
# Temukan dosen dengan yang bernama Yulianto
$dosen = Dosen::where('nama', '=', 'Yulianto')->first();
# Tampilkan seluruh data mahasiswa didikannya
foreach ($dosen->mahasiswa as $temp)
echo '<li> Nama : ' . $temp->nama . ' <strong>' . $temp->nim . '</strong></li>';
});
?>
Penjelasan :
- Saya menggunakan
foreach
untuk menampilkan data mahasiswa yang berupaarray()
. $dosen->mahasiswa
maksudnya mengambil semua data mahasiswa milik dosen terkait. Untuk lebih jelasnya, coba deh buka lagi modelDosen
kamu. Lalu temukanfunction mahasiswa
disana.$temp
merupakan variabel penampungan nilai sementaraecho ...
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 menempatkan id
dari salah satu tabel kedalam tabel yang lain.
Untuk relasi jenis ini, kita butuh 1 buah tabel tambahan sebagai perantara (pivot) antara tabel mahasiswa
dengan tabel hobi
.
Kalau begitu artinya kita akan menggunakan 3 tabel pada pembahasan relasi jenis ini :
- mahasiswa
- hobi
- mahasiswa_hobi

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
php artisan migrate:make buat_tabel_hobi --create=hobi
Lalu isi :
// app/database/migrations/####_##_##_######_buat_tabel_hobi.php
<?php
...
Schema::create('hobi', function(Blueprint $table)
{
$table->increments('id');
$table->string('hobi');
$table->timestamps();
});
...
?>
####Tabel Mahasiswa_Hobi
php artisan migrate:make buat_tabel_mahasiswa_hobi --create=mahasiswa_hobi
Lalu isi seperti berikut :
// app/database/migrations/####_##_##_######_buat_tabel_mahasiswa_hobi.php
<?php
...
Schema::create('mahasiswa_hobi', function(Blueprint $table)
{
$table->increments('id');
$table->unsignedInteger('id_mahasiswa');
$table->foreign('id_mahasiswa')->references('id')->on('mahasiswa')->onDelete('CASCADE');
$table->unsignedInteger('id_hobi');
$table->foreign('id_hobi')->references('id')->on('hobi')->onDelete('CASCADE');
});
...
?>
*Jangan lupa hapus timestamps
nya vroh.
####Migrate
php artisan migrate:refresh
###- 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
// app/models/Hobi.php
<?php
# Sesuaikan nama class dengan nama file yang dibuat
class Hobi extends Eloquent {
# Tentukan nama tabel terkait
protected $table = 'hobi';
# MASS ASSIGNMENT
# Untuk membatasi attribut yang boleh di isi (Untuk keamanan)
protected $fillable = array('hobi');
/*
* Relasi Many-to-Many
* ===================
* Buat function bernama mahasiswa(), dimana model 'Hobi' memiliki relasi
* Many-to-Many (belongsToMany) terhadap model 'Mahasiswa' yang terhubung oleh
* tabel 'mahasiswa_hobi' masing-masing sebagai 'id_hobi' dan 'id_mahasiswa'
*/
public function mahasiswa() {
return $this->belongsToMany('Mahasiswa', 'mahasiswa_hobi', 'id_hobi', 'id_mahasiswa');
}
}
?>
####Model Mahasiswa Tambah Dikit
// app/models/Mahasiswa.php
<?php
# Sesuaikan nama class dengan nama file yang dibuat
class Mahasiswa extends Eloquent {
...
/*
* Relasi Many-to-Many
* ===================
* Buat function bernama hobi(), dimana model 'Mahasiswa' memiliki relasi
* Many-to-Many (belongsToMany) terhadap model 'Hobi' yang terhubung oleh
* tabel 'mahasiswa_hobi' masing-masing sebagai 'id_mahasiswa' dan 'id_hobi'
*/
public function hobi() {
return $this->belongsToMany('Hobi', 'mahasiswa_hobi', 'id_mahasiswa', 'id_hobi');
}
}
?>
###- Seed
Buka lagi file Seeder
yang ada di direktori app/database/seeds/
bernama SeederRelasi.php
. Lalu paste syntax berikut di baris yang telah disediakan.
// app/database/seeds/SeederRelasi.php
<?php
# Sesuaikan nama class dengan nama file yang dibuat
class SeederRelasi extends Seeder {
public function run() {
...
/***********************************
*** SIAPKAN SEEDER HOBI DISINI ***
***********************************/
# Bersihkan tabel yang dibutuhkan
DB::table('hobi')->delete();
DB::table('mahasiswa_hobi')->delete();
# Isi tabel hobi
$mandi_hujan = Hobi::create(array('hobi' => 'Mandi Hujan'));
$baca_buku = Hobi::create(array('hobi' => 'Baca Buku'));
# Hubungkan Mahasiswa dengan Hobinya masing-masing
$novay->hobi()->attach($mandi_hujan->id);
$novay->hobi()->attach($baca_buku->id);
$dije->hobi()->attach($mandi_hujan->id);
$ayu->hobi()->attach($baca_buku->id);
# Tampilkan pesan ini bila berhasil diisi
$this->command->info('Mahasiswa beserta Hobi telah diisi!');
}
}
?>
php artisan db:seed
###- Route
Untuk pembuktian kalau relasi ini tidak sia-sia. Coba ikuti langkah berikut :
// app/routes.php
<?php
# URL localhost:8000/relasi-4/
Route::get('relasi-4', function() {
# Bila kita ingin melihat hobi saya
$novay = Mahasiswa::where('nama', '=', 'Noviyanto Rachmadi')->first();
# Tampilkan seluruh hobi si novay
foreach ($novay->hobi as $temp)
echo '<li>' . $temp->hobi . '</li>';
});
?>
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.
// app/routes.php
<?php
# URL localhost:8000/relasi-5/
Route::get('relasi-5', function() {
# Temukan hobi Mandi Hujan
$mandi_hujan = Hobi::where('hobi', '=', 'Mandi Hujan')->first();
# Tampilkan semua mahasiswa yang punya hobi mandi hujan
foreach ($mandi_hujan->mahasiswa as $temp)
echo '<li> Nama : ' . $temp->nama . ' <strong>' . $temp->nim . '</strong></li>';
});
?>
Ini output mereka yang punya hobi mandi hujan :
Gimana menurut kamu?
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 :
// app/routes.php
<?php
...
# URL : localhost:8000/eloquent
Route::get('eloquent', function() {
# Ambil semua data mahasiswa (lengkap dengan semua relasi yang ada)
$mahasiswa = Mahasiswa::with('wali', 'dosen', 'hobi')->get();
# Kirim variabel ke View
return View::make('eloquent', compact('mahasiswa'));
});
...
?>
####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
.
<!-- app/views/eloquent.blade.php -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Halo Eloquent</title>
<!-- CSS -->
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
<style type="text/css"> body { padding-top:50px; } </style>
</head>
<body class="container">
<div class="col-sm-8 col-sm-offset-2">
@foreach ($mahasiswa as $temp)
<h3> <small>[]</small></h3>
<h5>Hobi :
@foreach($temp->hobi as $tampung)
<small>, </small>
@endforeach
</h5>
<h4>
<li>Nama Wali : <strong></strong></li>
<li>Dosen Pembimbing : <strong></strong></li>
</h4>
<hr/>
@endforeach
</div>
</body>
</html>
Sekarang coba deh akses http://localhost:8000/eloquent
lalu lihat hasilnya.
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 :
<?php
# Membuat Mahasiswa baru kedalam tabel
Mahasiswa::create(array(
'nama' => 'Noviyanto Rachmadi',
'nim' => '1015015072'
));
?>
Cara pertama diatas sepertinya sudah kita temui di penerapan tutorial diatas.
<?php
# Alternatif lain dalam membuat Mahasiswa baru
# Buat sebuah objek atau instansi
$temp = new Mahasiswa;
# Siapkan isi
$temp->nama = 'Noviyanto Rachmadi';
$temp->nim = '1015015072';
# Simpan kedalam database
$bear->save();
?>
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.
<?php
/* Ini sebenarnya tujuannya sama seperti cara pertama,
* tapi bila kita perhatikan lagi, prosesnya sedikit berbeda.
* Mula-mula syntax akan mencari mahasiswa yang disebut dalam atribut
* (dalam hal ini mahasiswa bernama Noviyanto Rachmadi).
* Bila mahasiswa yang dimaksud tidak ditemukan, barulah mahasiswa
* baru ini dimasukin kedalam database
*/
Mahasiswa::firstOrCreate(array('nama' => 'Noviyanto Rachmadi'));
/* Untuk cara ini prosesnya sama seperti cara barusan.
* Yang berbeda adalah penggunaannya yang menggunakan cara kedua
* sebagai instansi yang di tampung dalam variabel $temp
*/
$temp = Mahasiswa::firstOrNew(array('nama' => 'Noviyanto Rachmadi'));
?>
###Read
Ada banyak cara untuk memanggil isi tabel dengan menggunakan Eloquent. Berikut beberapa contoh yang bisa kita gunakan :
<?php
# Ambil semua isi tabel mahasiswa
$temp = Mahasiswa::all();
# Ambil data mahasiswa berdasarkan id
$temp = Mahasiswa::find(1);
# Temukan data mahasiswa berdasarkan ketentuan atribut
$temp = Mahasiswa::where('nim', '=', '1015015072')->first();
# Temukan semua data mahasiswa yang NIMnya diatas 1015015072
$temp = Mahasiswa::where('nim', '>', '1015015072')->get();
?>
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.
<?php
# Temukan mahasiswa yang memiliki nim 1015015072
$temp = Mahasiswa::where('nim', '=', '1015015072')->first();
# Siapkan perubahan atribut
$temp->nim = '1015015078';
# Simpan kedalam database
$temp->save();
?>
###Delete
Untuk menghapus record dalam tabel sangatlah mudah, kita bisa menggunakan beberapa cara berikut :
<?php
# Temukan mahasiswa dengan id 1 lalu hapus
$temp = Mahasiswa::find(1);
$temp->delete();
# Hapus mahasiswa yang memiliki id 1
Mahasiswa::destroy(1);
# Untuk menghapus beberapa mahasiswa sekaligus
Mahasiswa::destroy(1, 2, 3);
# Menghapus dengan menggunakan kondisi
Mahasiswa::where('nim', '=', '1015015072')->delete();
?>
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
- Pokoknya intinya begitulah. RELASI.
Source Code Via Github
Semoga bermanfaat sahabatku sedunia dan setanah air.
Credit: Scotch