Hallo teman-teman ONPHPID, pada tutorial sebelumnya kita sudah belajar tentang One To Many dan Many To One Relationships di Laravel 5.3. Kali ini kita akan meneruskan belajar tentang Relationship pada laravel yaitu Many To Many Relationships. Untuk itu silakan teman-teman buka projectnya masing-masing. Jangan lupa untuk menjalankan serve lokalnya, disini ONPHPID menggunakan XAMPP, dan command promptnya sekalian kita buka dan arahkan ke folder project laravel kita.
Pertama kita buka model User dan tambahkan method seperti dibawah ini :
User.php
1 2 3 4 5 6 7 8 |
// code lain /** * satu user bisa memiliki lebih dari 1 role */ public function roles() { return $this->belongsToMany(Role::class); } |
jika sudah mari kita buat dua buah Model yaitu Role dan RoleUser sekalian file migrations-nya ya, dengan perintah artisan masih ingat kan bagaimana membuatnya. Jika lupa maka ONPHPID ingatkan lagi, yaitu dengan perintah di bawah ini :
1 |
php artisan make:model Role -m |
dan
1 |
php artisan make:model RoleUser -m |
kemudian edit model Role menjadi seperti di bawah ini :
Role.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Role extends Model { protected $table = 'roles'; protected $fillable = ['nama_role', 'created_at', 'updated_at']; /** * satu role dapat dimiliki oleh banyak user. */ public function users() { return $this->belongsToMany(User::class); } } |
karena hubungan User dan Role adalah Many To Many atau banyak ke banyak, artinya satu users dapat memiliki lebih dari satu roles dan sebaliknya satu buah roles dapat dimiliki lebih dari satu users, maka kita membutuhkan sebuah table untuk dijadikan pivot atau table bantu. Maka kita membuat table dengan nama role_user. Silakan teman-teman ubah model RoleUser menjadi seperti berikut ini :
RoleUser.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php namespace App; use Illuminate\Database\Eloquent\Model; class RoleUser extends Model { protected $table = 'role_user'; /** * sementara ini aja dulu, * karena Model ini akan berguna jika kita membuat multi user di aplikasi kita nantinya. */ } |
untuk model RoleUser kita buat seperti ini dulu, karena model ini berguna jika nantinya kita membuat sebuah aplikasi dengan banyak level users atau hak akses.
jika sudah sekarang kita buat file migrations, silakan ubah file role_migrations menjadi seperti di bawah ini :
1 2 3 4 5 6 7 8 9 10 |
// code lain public function up() { Schema::create('roles', function (Blueprint $table) { $table->increments('id'); $table->string('nama_role'); $table->timestamps(); }); } // code lain |
dan file role_user_migrations menjadi seperti ini :
1 2 3 4 5 6 7 8 9 |
// code lain public function up() { Schema::create('role_user', function (Blueprint $table) { $table->integer('user_id')->unsigned(); $table->integer('role_id')->unsigned(); }); } // code lain |
jika sudah mari kita buat dua buah file seeder untuk membuat data dummy, dengan nama RoleSeeder dan RoleUserSeeder, masih ingat juga kan cara membuatnya. jika lupa dapat membaca tutorial Belajar Laravel : Mengenal dan Membuat Seeder pada Laravel 5.3 untuk pemula lagi. kemudian buat menjadi seperti di bawah ini:
RoleSeeder.php
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\Role::insert([ [ 'nama_role' => 'manager', 'created_at' => \Carbon\Carbon::now('Asia/Jakarta') ], [ 'nama_role' => 'administrator', 'created_at' => \Carbon\Carbon::now('Asia/Jakarta') ], [ 'nama_role' => 'staff', 'created_at' => \Carbon\Carbon::now('Asia/Jakarta') ], ]); } // code lain |
RoleUserSeeder.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// code lain public function run() { \App\RoleUser::insert([ [ 'user_id' => 1, 'role_id' => 1 ], [ 'user_id' => 1, 'role_id' => 2 ], [ 'user_id' => 1, 'role_id' => 3 ], [ 'user_id' => 2, 'role_id' => 1 ], ]); } // code lain |
setelah itu kita tambahkan ke DatabaseSeeder.php
file yang akan kita seeder.
1 2 3 4 5 6 7 8 9 10 |
// code lain public function run() { $this->call(UserTableSeeder::class); $this->call(KendaraansTableSeeder::class); $this->call(ProfileSeeder::class); $this->call(RolesSeeder::class); $this->call(RolesUsersSeeder::class); } // code lain |
jika semua sudah, mari kita migrate dan melakukan seeder, untuk mengetahui hasilnya. Jika berhasil maka akan seperti gambar di bawah ini :
kemudian kita tambahkan route baru di web.php
seperti di bawah ini :
1 2 3 |
// code lain Route::get('/many-to-many/{name?}', 'BelajarController@getManyToMany'); // code lain |
karena kita sudah pernah membuat Controller maka kita akan menggunakan controller tersebut yaitu BelajarController.php
tambahkan satu buah method seperti di bawah ini :
BelajarController.php
1 2 3 4 5 6 7 8 9 |
// code lain public function getManyToMany($name = 'onphpid') { $title = 'Many To Many Relationships ONPHPID.'; $content = 'Saat ini kita belajar relasi Many To Many.'; $users = \App\User::where('name', $name)->first(); return view('many_to_many', compact('users', 'title', 'content', 'name')); } |
dari method di atas kita melempar data dari controller ke view dengan nama many_to_many, karena kita belum membuatnya, maka kita buat view baru dengan nama many_to_many.blade.php
. Kemudian buat menjadi seperti di bawah ini :
many_to_many.blade.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
@extends('layouts.app') @section('title', $title) @section('sidebar') @parent <li>PHP</li> @endsection @section('content') <center> <h1>{{ $title }}</h1> <p>{{ $content }}</p> <h3>Nama : {{ $name }}</h3> Hak akses : <ul> @foreach($users->roles as $role) {{ strtoupper($role->nama_role) }} <br/> @endforeach </ul> </center> @endsection |
karena di route kita membuat route dengan parameter yang kita define dengan nama onphpid, maka jika kalian akses localhost:8000/many-to-many
yang akan tampil adalah users dengan nama onphpid, jika ingin melihat users lainnya dapat mengakses localhost:8000/many-to-many/nama-user-nya
. Jika tidak ada kesalahan maka akan seperti gambar di bawah ini:
dari gambar di atas, users dengan nama onphpid memilik 3 hak akses, yaitu Manager, Administrator, dan Staff.
Bagaimana teman-teman sudah paham bukan tentang Many To Many Relationships pada Laravel. Jika belum dapat membaca dari dokumentasi Laravel di sini.
Baca Juga : Mengatasi Error Saat Migrations Pada Laravel 5.4
Sekian dulu tutorial Belajar Laravel : Many To Many Eloquent Relationships Pada Laravel 5.3 Untuk Pemula. Jika ada hal yang kurang jelas atau ingin ditanyakan dapat melalui komentar. JANGAN LUPA like FANSPAGE ONPHPID untuk update informasi dan Subscribe Channel ONPHPID Tutorial. Selamat Belajar…