Hallo teman-teman, apa kabar? baik bukan, masih semangat belajar Laravelnya bukan. O iya sekedar info, Laravel telah resmi merelease versi terbarunya yaitu Laravel 5.4, tidak jauh beda dengan Laravel 5.3 hanya saja ada beberapa fitur baru. Lain kali kita bahas Perbedaan laravel 5.3 dan Laravel 5.4. Setelah sebelumnya kita belajar tentang One To One Eloquent Relationships pada Laravel, kali ini kita akan belajar memahami One To Many atau Many To One Eloquent Relationships. One To Many relationships yaitu suatu hubungan atau relasi dua tabel, dimana satu entitas dari sebuah Model memiliki hubungan lebih dari satu dengan satu entitas Model lain. Kita akan menggunakan Model atau tabel yang sudah kita buat pada tutorial sebelumnya. Misalnya saja begini, satu entitas Model User berelasi dengan banyak entitas dari Model Kendaraan. Sederhananya satu User bisa punya banyak kendaraan dan Banyak kendaraan dimiliki satu user bukan?
Agar kita tidak membayangkan data yang belum ada, mari kita buka lagi project laravel yang kita buat pada tutorial sebelumnya. Namun, sebelum kita lanjut, kita perlu melakukan sedikit perubahan pada Model Kendaraan, dan seeder Kendaraan. Sebaiknya kita buka dulu kedua file tersebut, yaitu Kendaraan.php
, dan KendaraansTableSeeder.php
. Kita juga perlu membuat satu buah file migrations untuk menambahkan kolom di tabel kendaraans. Silakan dibuka command prompt-nya dan ketikan perintah artisan berikut :
1 |
php artisan make:migration adding_coloumns_in_kendaraans_table |
perintah di atas akan menggenerate satu buah file xxxx_xx_xx_xxxx_adding_coloumns_in_kendaraans_table.php
di database/migrations/
, mari kita buka dan ubah 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('kendaraans', function(Blueprint $table){ $table->integer('user_id') // type data integer ->index() // index ->unsigned() ->after('buatan'); // setelah kolom buatan $table->foreign('user_id') // foreignKey ->references('id') // dari kolom id ->on('users') // di tabel users ->onUpdate('cascade') // ketika terjadi perubahan di tabel users maka akan update ->onDelete('cascade'); // ketika data users di hapus akan ikut hilang }); } // code lain |
kenapa kita tidak mengedit file migrations yang sudah ada saja?
Jawabannya : Sebaiknya jangan pernah mengedit file migrations yang sudah di migrate, lebih baik membuat file baru untuk mengupdate tablenya.
kemudian kita buka KendaraansTableSeeder.php
dan tambahkan data users yang berelasi dengan tabel kendaraans, karena sebelumnya kita membuat seeder tanpa berelasi dengan tabel users. Jika sudah maka hasilnya akan seperti di bawah ini :
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 |
// code lain public function run() { Eloquent::unguard(); DB::statement('SET FOREIGN_KEY_CHECKS=0;'); \App\Kendaraan::truncate(); \App\Kendaraan::insert([ [ 'nama_kendaraan' => 'mobil', 'jenis_kendaraan' => 'roda empat', 'buatan' => 'jepang', 'created_at' => \Carbon\Carbon::now('Asia/Jakarta'), 'user_id' => 1 ], [ 'nama_kendaraan' => 'motor', 'jenis_kendaraan' => 'roda dua', 'buatan' => 'china', 'created_at' => \Carbon\Carbon::now('Asia/Jakarta'), 'user_id' => 2 ], [ 'nama_kendaraan' => 'sepeda', 'jenis_kendaraan' => 'roda dua', 'buatan' => 'china', 'created_at' => \Carbon\Carbon::now('Asia/Jakarta'), 'user_id' => 1 ], ]); DB::statement('SET FOREIGN_KEY_CHECKS=1;'); Eloquent::reguard(); } // code lain |
jika sudah sebaiknya kita rollback dulu semua tabelnya, agar tidak menimbulkan error. Kita bisa saja langsung melakukan migrate tanpa merollback karena kita tidak mengedit migrations melainkan membuat baru. Inilah keuntungannya, jika aplikasi kita sudah besar tidak mungkin kita merollback karena semua datanya akan hilang. Kita rollback saja dulu agar jika nanti error teman-teman tidak bingung. Ok, kita rollback dulu, ketikan php artisan migrate:rollback
di command prompt, kemudian kita migrate ulang dengan mengetikan php artisan migrate
, setelah itu kita seed datanya dengan mengetikan php artisan db:seed
. Jika tidak ada masalah maka akan seperti ini hasil di command prompt-nya :
Data sudah kita buat, langkah selanjutnya mari kita definisikan relasinya di Model masing-masing. Tambahkan code berikut di Model User.php
seperti ini :
1 2 3 4 5 6 7 8 9 |
// code lain /** * Untuk mendapatkan data kendaraan yang berelasi dengan User. */ public function kendaraans() { return $this->hasMany(Kendaraan::class); } // code lain |
kemudian code di bawah ini ke Model Kendaran.php, sehingga seperti ini :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Kendaraan extends Model { protected $table = 'kendaraans'; protected $fillable = [ 'nama_kendaraan', 'jenis_kendaraan', 'buatan', 'user_id', 'created_at', 'updated_at' ]; /** * Untuk mendapatkan data users yang berelasi dengan kendaraan. */ public function user() { return $this->belongsTo(User::class); } } |
jika sudah, mari kita tambah kan route berikut ini di web.php
:
1 2 |
Route::get('/one-to-many', 'BelajarController@getOneMany'); Route::get('/many-to-one', 'BelajarController@getManyOne'); |
dan tambahkan method di bawah ini di BelajarController.php
menjadi seperti di bawah ini :
BelajarController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// code lain public function getOneMany() { $title = 'One To Many and Many To One Relationships ONPHPID.'; $content = 'Saat ini kita belajar relasi One To Many and Many To One.'; $users = \App\User::all(); return view('one_to_many', compact('users', 'title', 'content')); } public function getmanyOne() { $title = 'One To Many and Many To One Relationships ONPHPID.'; $content = 'Saat ini kita belajar relasi One To Many and Many To One.'; $kendaraans = \App\Kendaraan::all(); return view('many_to_one', compact('kendaraans', 'title', 'content')); } // code lain |
kemudian kita buat dua buah file di views dengan nama one_to_many.blade.php
dan many_to_one.blade.php
untuk menampilkannya, lalu buat seperti di bawah ini :
one_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 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
@extends('layouts.app') @section('title', $title) @section('sidebar') @parent <li>PHP</li> @endsection @section('content') <center> <h1>{{ $title }}</h1> <p>{{ $content }}</p> @foreach ( $users as $user ) <tr> <h3>Nama : {{ $user->name }}</h3> </tr> <table> <thead> <tr> <th>Kendaraan</th> <th>Jenis Kendaraan</th> <th>Buatan</th> </tr> </thead> <tbody> @foreach($user->kendaraans as $kendaraan) <tr> <td>{{ $kendaraan->nama_kendaraan }}</td> <td>{{ $kendaraan->nama_kendaraan }}</td> <td>{{ $kendaraan->buatan }}</td> </tr> @endforeach </tbody> </table> @endforeach </center> @endsection |
many_to_one.blade.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 |
@extends('layouts.app') @section('title', $title) @section('sidebar') @parent <li>PHP</li> @endsection @section('content') <center> <h1>{{ $title }}</h1> <p>{{ $content }}</p> <table> <thead> <tr> <th>Kendaraan</th> <th>Buatan</th> <th>Pemilik</th> </tr> </thead> <tbody> @foreach ( $kendaraans as $kendaraan ) <tr> <td>{{ $kendaraan->nama_kendaraan }}</td> <td>{{ $kendaraan->jenis_kendaraan }}</td> <td>{{ $kendaraan->user->name }}</td> </tr> @endforeach </tbody> </table> </center> @endsection |
jika sudah mari kita check di browser, jangan lupa ketikan php artisan serve
ya, lalu akses dengan url localhost:8000/one-to-many
dan localhost:8000/many-to-one
. Jika tidak ada kesalahan maka akan seperti gambar di bawah ini :
dari gambar pertama kita mengakses semua users dan kendaraan yand di miliki user, sedangkan gambar kedua kita mengakses semua kendaraan dan siapa pemiliknya. Gimana teman-teman paham bukan? jika kalian belum paham bisa membacanya pelan-pelan sambil mempraktekannya atau jika kalian ingin membaca referensinya bisa ke sini.
Baca Juga : Memahami One To One Relationships pada Laravel 5.3 untuk pemula part-2
Sekian dulu tutorial Belajar Laravel : Memahami One 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…