Belajar Laravel : Apa itu Has Many Through Relationships? Pada Laravel 5.3 untuk pemula
Mari kita simak penjelasan berikut, mari belajar laravel.Hallo teman-teman ONPHPID, di artikel
Many To Many Eloquent Relationships Pada Laravel 5.3 Untuk Pemula sebelumnya, kita sudah belajar tentang suatu hubungan relasi
Many To Many.
Jika belum mengikuti artikel sebelumnya bisa membacanya terlebih dulu,
agar dapat mngikuti tutorial pada artikel ini. Pada tutorial kali ini,
ONPHPID akan menjelaskan salah satu hubungan yang mungkin teman-teman
belum mendengarnya.
ONPHPID pun baru tahu di
Framework Laravel, yaitu
Has Many Through Relationships.
Apa itu Has Many Through Relationships ?
Pada dokumentasi
Laravel 5.3 disebutkan bahwa
Has Many Through merupakan relasi yang dapat dijadikan jalan pintas atau
shortcut
untuk mengakses data dari tabel lain, namun dilakukan dengan pendekatan
dari tabel lain atau tabel yang dapat menghubungkan data tersebut.
Sebagai contoh, ONPHPID akan memberi gambaran sebagai berikut :
1
2
3
4
5
6
7
8
9
10
11
12
13
|
kotas
id - integer
nama_kota - string
users
id - integer
kota_id - integer
name - string
kendaraans
id - integer
user_id - integer
nama_kendaraan - string
|
dari plan tabel di atas, tabel
kendaraans tidak ada hubungan relasi dengan tabel
kotas (baca:
kota) tapi kita dapat mendapatkan semua data kendaraan yang ada di kota
A misalnya. Lalu bagaimana caranya? yaitu dengan memanfaatkan tabel
users yang berelasi dengan tabel
kendaraans.
Mari kita coba agar tidak berangan-angan. O iya, jika teman-teman sudah
mengikuti tutorial ini dari awal, pastinya sudah memiliki tabel
tersebut kecuali tabel
kotas. Karena tabel tersebut baru akan kita buat pada tutorial kali ini.
Buka dulu projectnya masing-masing, lalu buat satu buah
Model dengan nama Kota sekaligus file
migrations-nya dengan perintah di bawah ini :
|
php artisan make:model Kota -m
|
jika sudah buat agar model
Kota menjadi seperti di bawah ini :
Kota.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Kota extends Model
{
protected $table = 'kotas';
protected $fillable = ['nama_kota'];
/**
* Untuk mendapatkan semua kendaraan melalui model Kota.
* Jika table kalian mengikuti konvensi dari Laravel
* Maka pakai yang di bawah ini
* Konvensi tsb yaitu nama Foreign key nya user_id, post_id, dll
* dan Primary key nya id
*/
public function kendaraans()
{
return $this->hasManyThrough(Kendaraan::class, User::class);
}
/**
* Jika tidak mengikuti konvensi Laravel
*/
public function kendaraan()
{
return $this->hasManyThrough(
'App\Kendaraan', 'App\User',
'kode_kota', // foreign key di table users misalnya
'user_kode', // foreign key di table kendaraans misalnya
'kode_user' // foreign key di table users misalnya
);
}
}
|
kemudian tambahkan pada method
up() di file
migrations yang baru kita buat jadi seperti di bawah ini :
|
// code lain
public function up()
{
Schema::create('kotas', function (Blueprint $table) {
$table->increments('id');
$table->string('nama_kota');
$table->timestamps();
});
}
// code lain
|
setelah itu kita buat satu file
migrations untuk menambah kolom foreign pada tabel
users, karena tabel
kotas dan
users belum berelasi, dengan perintah artisan berikut :
|
php artisan make:migration create_foreign_in_users_table
|
kemudian buat
method up() menjadi seperti di bawah ini :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
// code lain
public function up()
{
Schema::table('users', function(Blueprint $table){
$table->integer('kota_id')
->index()
->unsigned()
->after('password');
$table->foreign('kota_id')
->references('id')
->on('kotas')
->onUpdate('cascade')
->onDelete('cascade');
});
}
// code lain
|
setelah itu kita buat satu buah file
seeder dengan nama
KotaSeeder.php
dengan menggunakan perintah
artisan di bawah ini :
|
php artisan make:seeder KotaSeeder
|
buat menjadi seperti di bawah ini :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
// code lain
public function run()
{
\App\Kota::insert([
[
'nama_kota' => 'magetan'
],
[
'nama_kota' => 'surakarta'
],
[
'nama_kota' => 'yogyakarta'
]
]);
}
// code lain
|
karena kita pernah melakukan
seeder pada tutorial sebelumnya, maka kita perlu mengubah data
users. Jadi buka file
UserTableSeeder.php
dan ubah menjadi seperti di bawah ini :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
// code lain
public function run()
{
\App\User::insert([
[
'name' => 'onphpid',
'email' => 'onphpid@gmail.com',
'password' => \Hash::make('onphpid'),
'kota_id' => 1
],
[
'name' => 'john',
'email' => 'john@gmail.com',
'password' => \Hash::make('john'),
'kota_id' => 2
]
]);
}
// code lain
|
ubah juga file
DatabaseSeeder.php
menjadi seperti di bawah ini, perhatikan urutannya agar tidak terjadi
error ketika kita melakukan
seeder :
|
// code lain
public function run()
{
$this->call(KotaSeeder::class);
$this->call(UserTableSeeder::class);
$this->call(KendaraansTableSeeder::class);
$this->call(ProfileSeeder::class);
$this->call(RolesSeeder::class);
$this->call(RolesUsersSeeder::class);
}
// code lain
|
jika sudah, silakan kalian tutup semua filenya, karena sudah banyak file yang kita buka. Setelah itu kita perlu menambahkan
route baru di
web.php
seperti ini :
|
// code lain
Route::get('/has-many-through/{id?}', 'BelajarController@hasManyThrough');
|
kita akan menampilkan data semua kendaraan yang ada di kota
Magetan dengan parameter
id dari tabel kota. Setelah itu tambahkan satu method di
BelajarController.php
seperti di bawah ini :
|
// code lain
public function hasManyThrough($id = 1)
{
$title = 'Has Many Through Relationships ONPHPID.';
$content = 'Saat ini kita belajar relasi Has Many Through.';
$kota = \App\Kota::find($id);
return view('has_many_through', compact('kota', 'title', 'content'));
}
// code lain
|
jika sudah mari kita buat satu
view baru dengan nama
has_many_through.blade.php
dan tambahkan
code di bawah ini :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
@extends('layouts.app')
@section('title', $title)
@section('content')
<center>
<h1>{{ $title }}</h1>
<p>{{ $content }}</p>
Kendaraan yang ada di kota <strong>{{ ucwords($kota->nama_kota) }}</strong> :
<ul>
@foreach($kota->kendaraans as $kendaraan)
{{ strtoupper($kendaraan->nama_kendaraan) }} <br/>
@endforeach
</ul>
</center>
@endsection
|
jika semua sudah, akhirnya kita selesai.
Masih ingat kan apa yang harus kita lakukan? Iya.. benar kita perlu melakukan
migrate dan
seeder. Namun sebelum migrate sebaiknya kita
rollback dulu semua tabel yang pernah kita migrate, karena kita melakukan perubahan pada tabel
users. Ketikan perintah sebagai berikut :
|
php artisan migrate:rollback
|
kemudian
terakhir
jika berhasil maka akan tampak seperti gambar di bawah ini :
![Apa itu Laravel |Laravel Apa itu Laravel |Laravel](https://i2.wp.com/www.onphpid.com/wp-content/uploads/2017/02/rollback-migrate.png?resize=720%2C241&ssl=1)
setelah itu kita cek di browser apakah kita berhasil menampilkan semua kendaraan yang berada di kota Magetan, dengan mengakses
localhost:8000/has-many-through
. Jika tidak ada kesalahan maka akan tampil seperti gambar di bawah ini :
![Apa itu Laravel |Laravel Apa itu Laravel |Laravel](https://i2.wp.com/www.onphpid.com/wp-content/uploads/2017/02/has-many-through.png?resize=720%2C405&ssl=1)
Alhamdulillah kita sudah
belajar tentang Has Many Trough. Jika belum paham dapat membaca secara langsung dokumentasi laravel
di sini.
https://www.onphpid.com/belajar-laravel-apa-itu-has-many-through-relationships-pada-laravel-5-3-untuk-pemula.html
Comments