menu

Laravel - Relation pada model (hasMany)


Tutorial sebelumnya kita sudah membuat sebuah relasi tabel pada database, sekarang kita akan membuat relasi tabel pada model laravel sehingga data dapat kita tampilkan pada blade.

Oke langsung saja kita mulai tutorialnya,

Pertama, buat file model baru dengan nama Address.php pada path protected/app/models/ dan isikan code berikut,
<?php namespace Model;

class Address extends \Eloquent {

 /**
  * The database table used by the model.
  *
  * @var string
  */
 protected $table = 'addresses';

 /**
  * The attributes excluded from the model's JSON form.
  *
  * @var array
  */
 protected $hidden = array('user_id');
}

Selanjutnya, edit file model User.php pada path protected/app/models/ dengan menambahkan function relasi hasMany tabel addresses pada tabel users, sehingga model User.php akan tampak seperti ini,
.
.
.
    // Relation
    public function addresses()
    {
        return $this->hasMany('Model\Address');
    }
.
.
.

Kemudian, buat file controller baru untuk menampilkan user detail yang berisikan array tabel users dan tabel addresses, beri nama file controller UserController.php letakkan pada path protected/app/controllers/relation/ dan isikan code berikut,
<?php namespace Controller\Relation;

use Model\User;
use \View;

class UserController extends \BaseController 
{
 public function getUserDetail($user_id)
 {
  $user = User::where('id', $user_id)->first();
  //code dibawah untuk panggil relasi dari model user
  if($user){
   $address = $user->addresses;
  }
  return View::make('web.relation.show-user-detail')->with('user', $user);
 }
}

Setelah itu, edit file route web.php pada path protected/app/routes/ dengan menambahkan code berikut,
.
.
.
//////////////
// RELATION //
//////////////
//pahamilah group route dibawah
Route::group(array('prefix' => 'relation'), function(){
 Route::get('detail/{user_id}', 'Controller\Relation\UserController@getUserDetail');
});
.
.
.

Selanjutnya, buat file blade baru dengan nama show-user-detail.blade.php letakkan pada path protected/app/views/web/relation/ dan isikan code berikut,
@extends('layouts/web/master')
@section('content')
 <?php $title = "User" ?>
 <div class="isi">
  <div class="row">
   <table class="table table-bordered table-hover">
      <thead>
       <tr>
           <th>ID</th>
           <th>NAME</th>
           <th>USERNAME</th>
           <th>EMAIL</th>
        </tr>
      </thead>
      <tbody>
        <tr>
      <td>{{ $user->id }}</td>
      <td>{{ $user->name }}</td>
      <td>{{ $user->username }}</td>
      <td>{{ $user->email }}</td>
        </tr>
       </tbody>
   </table>
   <br>
   <table class="table table-bordered table-hover">
      <thead>
       <tr>
      <th>Nama alamat</th>
      <th>Kota</th>
      <th>Provinsi</th>
      <th>Alamat</th>
      <th>Zipcode</th>
      <th>Phone</th>
        </tr>
      </thead>
      <tbody>
       @forelse($user['addresses'] as $address)
         <tr>
       <td>{{ $address->name_address }}</td>
       <td>{{ $address->city }}</td>
       <td>{{ $address->province }}</td>
       <td>{{ $address->address }}</td>
       <td>{{ $address->zipcode }}</td>
       <td>{{ $address->phone }}</td>
         </tr>
        @empty
         Address not found
        @endforelse
       </tbody>
   </table>
  </div>
   <br>
   <button class="btn btn-default" type="button">Create</button>
 </div>
@stop

Terakhir, edit file blade readUser.blade.php pada path protected/app/views/web/ menjadi seperti ini,
.
.
.
        @foreach($data_user as $users)
          <tr>
             <td>{{ $users->id }}</td>
             <td>{{ $users->name }}</td>
             <td>{{ $users->username }}</td>
             <td>{{ $users->email }}</td>
             <td>{{ $users->password }}</td>
             <td>{{ $users->created_at }}</td>
             <td>
              <a href="{{ URL::to('relation/detail/'.$users->id) }}">Address list<br>
             </td>
             <td>
              <a href="{{ URL::to('crud/update/'.$users->id) }}">Edit<br>
              <a href="{{ URL::to('crud/delete/'.$users->id) }}">Delete
             </td>
          </tr>
        @endforeach
.
.
.

Jangan lupa untuk mengcompile composer setelah membuat file model baru caranya


Sehingga tampilannya akan tampak seperti ini,


Jika field Address list kita klik maka akan menampilkan halaman ini,



===DONE!===