menu

Docker - Install docker dan docker-compose ubuntu 16.04


Pada tutorial sebelumnya kita sudah membahas tentang bagaimana cara mengganti port default apache pada ubuntu, kali ini kita akan memulai untuk bermain dengan docker.

Docker merupakan sebuah aplikasi opensource yang berguna sebagai tempat atau container untuk mengepak/memasukkan sebuah software secara lengkap agar software tersebut dapat dijalankan dengan baik.

Oke langsung saja kita mulai instalasinya..

Pertama, install terlebih dahulu dockernya,
//update first
sudo apt-get update

//tambahkan GPG key
sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

//tambahkan docker repository
sudo apt-add-repository 'deb https://apt.dockerproject.org/repo ubuntu-xenial main'

//update lagi package database
sudo apt-get update

//install docker
sudo apt-get install -y docker-engine

Kemudian, install docker-compose,
//cek release terbaru
sudo curl -o /usr/local/bin/docker-compose -L "https://github.com/docker/compose/releases/download/1.11.2/docker-compose-$(uname -s)-$(uname -m)"

//set permissions
sudo chmod +x /usr/local/bin/docker-compose

Sehingga hasilnya akan tampak seperti ini,


===DONE!===

How to - Mengganti port apache pada ubuntu



Sudah hampir akhir bulan mei dan codedoct sama sekali belom release artikel apapun, haha..

Saat ini codedoct sedang sibuk mendalami ilmu-ilmu baru yang sudah direncanakan tutorialnya akan dibuat pada website ini, salah satu ilmu yang akan dishare adalah docker(tunggu saja tanggal mainnya).

Oke pada tutorial kali ini codedoct akan menshare trick baru yg nanti akan sangat berguna dalam bermain docker, yaitu trick mengganti port apache default pada ubuntu.

Pertama, coba lihat dulu list port yang ada pada ubuntu anda dengan cara,
sudo netstat -tulpn

Tampilannya akan tampak seperti ini,


Selanjutnya untuk mengganti port tersebut, tinggal edit saja file ports.conf pada path /etc/apache2/ caranya,
sudo vim /etc/apache2/ports.conf

Secara default akan terbuka file seperti ini,
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 80


        Listen 443



        Listen 443


# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Kemudian ganti saja Listen 80 menjadi port yang diinginkan, misal saya ganti menjadi 2305,
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 2305


        Listen 443



        Listen 443


# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Setelah itu edit juga file 000-default.conf pada path /etc/apache2/sites-enabled/
dari,
<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

menjadi,
<VirtualHost *:2305>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

Terakhir restart apache,
sudo service apache2 restart

Sehingga tampilannya akan tampak seperti ini,


===DONE!===

Website sederhana untuk pemula menggunakan PHP - migration database


Pada website ini saya sudah membagikan tutorial untuk php native, versi php yang saya gunakan pada tutorial itu adalah 5.6 dikarenakan saya akan melakukan migrasi ke php 7.0 maka saya akan mengakhiri tutorial untuk php native 5.6.

Tutorial kali ini merupakan tutorial terakhir dari project php yang sudah saya buat sebelumnya, tutorial kali ini untuk melengkapi tutorial sebelum-sebelumnya sehingga project php native (website sederhana untuk pemula menggunakan php) yang sudah saya buat sebelum-sebelumnya bisa tinggal anda clone dan langsung di jalankan,

Pada tutorial kali ini saya akan membuatkan function migration sehingga teman2 bisa langsung menjalankannya pada terminal untuk membuat database project ini secara otomatis

Oke langsung saja kita mulai tutorialnya,
Pertama, buat folder baru dengan nama database dan buat file baru dengan nama migration.php pada folder tersebut, isikan code berikut
<?php
  $host="localhost";
  $user="root";
  $pass="root";  

  $dbname = "blog_php_5_6";
  $tablename = "crud";

  $db=mysql_connect($host,$user,$pass);

  //create database if not exists
  $sql ="CREATE DATABASE IF NOT EXISTS `$dbname` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci";
  $message = mysql_query($sql,$db);
  if ($message) {
    print_r("Create database success.\n");
  }

  $sql="USE `$dbname`";
  $message = mysql_query($sql,$db);
  if ($message) {
    print_r("Choose database success.\n");
  }

  //create table if not exists
  $sql = "CREATE TABLE IF NOT EXISTS `$tablename` (
            id bigint( 20 ) AUTO_INCREMENT PRIMARY KEY,
            name varchar( 50 ) NOT NULL,
            email varchar( 150 ) NOT NULL, 
            address text( 150 ) NULL,
            created_at timestamp NULL,
            updated_at timestamp NULL
          );";
  $message = mysql_query($sql,$db);
  if (!$message) { 
    print_r(mysql_error($db)."\n");
  } else {
    print_r("Create table success.\n");
  }

  //add primary key
  $sql = "ALTER TABLE `$tablename` ADD PRIMARY KEY (`id`)";
  mysql_query($sql,$db);

  //add auto increment
  $sql = "ALTER TABLE `$tablename` MODIFY `id` bigint(20) NOT NULL AUTO_INCREMENT";
  mysql_query($sql,$db);
?>

Kemudian edit file koneksi.php
<?php
  $host="localhost";
  $user="root";
  $pass="root";
  $dbname="blog_php_5_6";

  $db=mysql_connect($host,$user,$pass);
  mysql_select_db($dbname,$db);
?>

Edit pula file Delete.php dan Update.php pada folder model
Delete.php
<?php
    $user_id  = $_GET["user_id"];
 $_id   = $_POST["id"];
 $_delete  = $_POST["dell"];
 $_name   = $_POST["name"];
 $_email   = $_POST["email"];
 $_address = $_POST["address"];

 if ($_delete) {
  if ($_id) {
   $sql="DELETE FROM crud WHERE id = '$_id'";
      mysql_query($sql,$db);
  }
     header("Location: http://localhost/BLOG/blog-php_5_6");
  die();
 }

 $sql="SELECT * FROM crud WHERE id='$user_id'";
 $hsl=mysql_query($sql,$db);
 list($name,$email,$address,$created_at,$updated_at,$id)=mysql_fetch_array($hsl);
?>
Update.php
<?php
    $user_id  = $_GET["user_id"];
 $_id   = $_POST["id"];
 $_simpan  = $_POST["simpan"];
 $_name   = $_POST["name"];
 $_email   = $_POST["email"];
 $_address = $_POST["address"];

 if ($_simpan) {
  if ($_id) {
   $sql="UPDATE crud SET
   name = '$_name',
   email = '$_email',
   address = '$_address',
   updated_at = NOW()
         WHERE id = '$_id'";
      mysql_query($sql,$db);
  }
     header("Location: http://localhost/BLOG/blog-php_5_6");
  die();
 }

 $sql="SELECT * FROM crud WHERE id='$user_id'";
 $hsl=mysql_query($sql,$db);
 list($name,$email,$address,$created_at,$updated_at,$id)=mysql_fetch_array($hsl);
?>

Terakhir edit file read.php pada folder view/crud/ dan file header.php pada folder view/master
read.php
<!-- custom css -->
<link rel="stylesheet" href="styles/style.css">
<!--  -->
<!-- model -->
<?php include_once "model/Read.php" ?>
<!--  -->
<!-- content -->
<?php include_once "view/master/header.php" ?>
<div class="content">
  <div class="fill">
   <table border="1px";>
 <tr>
  <th>No</th>
  <th>Name</th>
  <th>Email</th>
  <th>Address</th>
  <th>Created At</th>
  <th>Updated At</th>
  <th>Action</th>
 </tr>
 <?php
  $sql="SELECT * FROM crud";
  $hsl=mysql_query($sql,$db);
  $no=0;
  while(list($id,$name,$email,$address,$created_at,$updated_at)=mysql_fetch_array($hsl)){
   $no++;
   ?>
     <tr>
      <td><?=$no?></td>
      <td><?=$name?></td>
      <td><?=$email?></td>
      <td><?=$address?></td>
      <td><?=$created_at?></td>
      <td><?=$updated_at?></td>
      <td>
       <a href="view/crud/update.php?user_id=<?=$id?>">Edit</a> ||
       <a href="view/crud/delete.php?user_id=<?=$id?>">Delete</a>
      </td>
     </tr>
      <?php
  }
 ?>
 </table>
 <br>
 <button class="button_def" onclick='window.location="view/crud/create.php"'>Create</button>
  </div>
</div>
<?php include_once "view/master/footer.php" ?>
header.php
<div class="main_image">
 <div class="header_content">
  <li><a href="http://localhost/BLOG/blog-php_5_6">Home</a></li>
 </div>
</div>

===DONE!===

How to - Install phalcon


Tidak terasa sudah lebih dari 2 minggu tidak menulis blog karena sibuk pindah kantor dan pindah rumah, akhirnya bisa kembali bereksperiment,

Kali ini codedoct akan memberikan tutorial cara instalasi phalcon pada ubuntu 16.04. Phalcon sendiri merupakan framework php yang menurut saya memiliki struktur directory yang sangat sederhana bila dibandingkan dengan framework lain.

Oke kita langsung saja mulai tutorialnya,
Pertama, pastikan ubuntu kalian sudah terinstall LAMP cara installnya bisa lihat disini,

Selanjutnya, silahkan ketikan perintah berikut satu-persatu pada terminal,
cd /var/www/html
mkdir phalcon
cd phalcon

sudo apt-get install -y php7.0-fpm \
     php7.0-cli \
     php7.0-curl \
     php7.0-gd \
     php7.0-intl \
 php7.0-pgsql \
 php7.0-mbstring \
 php7.0-xml \
 php-msgpack \
 curl \
 vim \
 wget \
 git

sudo apt-add-repository ppa:phalcon/stable
sudo apt-get update
sudo apt-get install php7.0-phalcon
sudo apt-get install -y gcc make re2c libpcre3-dev php7.0-dev build-essential php7.0-zip

sudo apt-get install gcc make autoconf libc-dev pkg-config
git clone --depth=1 git://github.com/phalcon/cphalcon.git
cd cphalcon/build
sudo PATH=/opt/sp/php7.0/bin:$PATH ./install

php -i | grep Loaded //untuk melihat path php7.0
sudo bash -c "echo extension=phalcon.so > /etc/php/7.0/cli/conf.d/phalcon.ini"
sudo service php7.0-fpm restart

Untuk mengetes apakah phalcon sudah terinstall dengan baik atau belum silahkan buat file phpinfo.php pada directory /var/www/html kemudian isikan code php berikut,
<?php phpinfo(); ?>

Setelah itu buka browser dan masukan url localhost/phpinfo.php maka saat kita cari phalcon akan muncul seperti ini,


Kemudian install phalcon devtools agar kita bisa menggunakan tools yang ada pada phalcon, cara instalasinya seperti ini,
cd /var/www/html/phalcon
git clone https://github.com/phalcon/phalcon-devtools.git
ln -s /var/www/html/phalcon/phalcon-devtools/phalcon.php /usr/local/bin/phalcon
chmod +x /usr/local/bin/phalcon

Terakhir test phalcon, ketikan printah berikut pada terminal,
cd
phalcon

Sehingga akan muncul seperti ini,


===DONE!===

How to - Switch php version on ubuntu


Sudah sebulanan tidak update blog dikarenakan masih proses penyesuaian bekerja pada kantor baru, akhirnya bisa kembali ngeblog.

Kantor baru laptop-pun baru dan terpaksa harus setup ulang, pada kantor lama lebih sering pakek OS Windows sekarang dikantor baru full menggunakan ubuntu untuk kebutuhan coding hehe,.,.

Oke, minggu kemarin saya sudah clone semua project yang dibahas pada website ini dan menjalankanya pada laptop kantor yang baru dan semuanya lancar, kecuali pada tutorial membuat website sederhana menggunakan php.

Hal ini dikarenakan saat develop project tersebut saya menggunakan php5.6 sedangkan laptop baru saya menggunakan php7.0 untuk itu saya harus mengganti php7.0 saya dengan php5.6 ingat! mengganti dalam hal ini mendisable php7.0 dan mengenable php5.6 bukan menghapus dan menginstall yang baru.

Dikarenakan laptop baru saya hanya ada php7.0 maka saya harus install terlebih dahulu php5.6 tanpa harus menghapus php7.0 karena keduanya bisa diinstall secara bersamaan.

Untuk memastikan saja install kembali kedua versi php tersebut dengan cara seperti ini,
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php7.0 php5.6 php5.6-mysql php-gettext php5.6-mbstring php-mbstring php7.0-mbstring php-xdebug libapache2-mod-php5.6 libapache2-mod-php7.0

Untuk menswitch-nya dengan cara seperti ini,
dari php7.0 ke php5.6
- apache
sudo a2dismod php7.0 ; sudo a2enmod php5.6 ; sudo service apache2 restart
- cli
sudo update-alternatives --set php /usr/bin/php5.6

dari php5.6 ke php7.0
- apache
sudo a2dismod php5.6 ; sudo a2enmod php7.0 ; sudo service apache2 restart
- cli
sudo update-alternatives --set php /usr/bin/php7.0

Pada saat mengaktifkan php7.0 kita juga harus mengaktifkan proxy_fcgi karena merupakan require pada php7.0 begitupun sebalikya saat php7.0 dinonaktifkan maka proxy_fcginya juga harus dinonaktifkan, caranya.
- nonaktifkan
sudo a2dismod proxy_fcgi proxy; sudo service apache2 restart
- aktifkan
sudo a2enmod proxy_fcgi proxy; sudo service apache2 restart

===DONE!===

Engine PHP - Upload and download file


Hello codedoctors,

Kali ini codedoct akan sharing ilmu untuk membuat sebuah engine yang dapat meng-upload dan men-download suatu file. engine ini akan kita buat menggunakan bahasa PHP native.

Oke langsung saja kita mulai tutorialnya,

Pertama, buat folder projectnya terlebih dahulu dalam hal ini codedoct akan memberi nama file test-upload-download-file dan buat folder baru juga didalammnya dengan nama file sehingga struktur foldernya akan tampak seperti ini,


Kemudian, buat tabel pada database dengan struktur seperti ini,


Setelah itu, buat file baru dengan nama index.php seperti struktur diatas, dan isikan code berikut,
<?php
 include_once('uploadController.php');
?>
<head>
 <title>Hello | Budy</title>
</head>
<body>
 <div class="show-file">
  <ul>
   <?php
     $sql="SELECT * FROM upload_and_download_file";
     $hsl=mysql_query($sql,$db);
     $no=0;
     while(list($id,$name,$created_at)=mysql_fetch_array($hsl)){
       $no++;?>
      <li><?=$no?></li>
        <ul>
       <li><?=$name?></li>
       <li><?=$created_at?></li>
       <li><a href="downloadController.php?file_name=<?=$name?>">Download</a></li>
      </ul>
    <?php }
   ?>
  </ul>
 </div>
 <div class="upload-file">
  <form action="uploadController.php" method="post" enctype="multipart/form-data">
   <input type="file" name="uploadFile">
   <input type="submit" value="Upload" name="upload">
  </form>
 </div>
</body>

Selanjutnya, buat file baru dengan nama connection.php dan isikan code berikut,
<?php
 $servername = "localhost";
 $username = "root";
 $password = "root";
 $dbname = "test";

 $db=mysql_connect($servername,$username,$password);
 mysql_select_db($dbname,$db);
?>

Kemudian, buat file baru dengan nama model.php dan isikan code berikut,
<?php
 class FileController 
 {
  public function saveFile($name)
  {
   include 'connection.php';
   $sql="INSERT INTO upload_and_download_file (name,created_at) VALUES ";
      $sql.="('$name',NOW())";
    $save = mysql_query($sql,$db);

   if ($save) {
       return true;
   } else {
       echo "Error";
   } 
  }
 }
?>

Terakhir buat file baru dengan nama uploadController.php dan downloadController.php dan isikan code berikut,
uploadController.php
<?php
 include_once('connection.php');
 include_once('model.php');

 if (isset($_POST['upload'])) {
  $errors  = array();
  $file_name  = $_FILES['uploadFile']['name'];
  $file_size  = $_FILES['uploadFile']['size'];
  $file_tmp  = $_FILES['uploadFile']['tmp_name'];
  $file_ext = strtolower(end(explode('.',$_FILES['uploadFile']['name'])));

  $extensions = array("txt");

  if(in_array($file_ext,$extensions)===false){
   $errors[]="extension not allowed, please choose a TXT file.";
  }

  if($file_size > 1024000){
   $errors[]='File size must be excately 1 MB';
  }

  if(empty($errors)==true){
   //save file to folder file
   $filename = strtotime('now').'_'.$file_name;
   move_uploaded_file($file_tmp,"file/".$filename);

   //save file to database
   $model = new FileController;
   $save_file = $model->saveFile($filename);
   if ($save_file) {
    //back to project
    $path_project = "http://localhost/test/test-upload-download-file/";
    header("Location: $path_project");
   }
  }else{
   print_r($errors);
   ?><br><a href="/test/test-upload-download-file">Back</a><?php
  }
 }
?>

downloadController.php
<?php
    $file_name = $_GET['file_name'];
    $file = "file/".$file_name;

    if(!file_exists($file)) die("I'm sorry, the file doesn't seem to exist.");

    header("Pragma: public", true);
    header("Expires: 0"); // set expiration time
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");
    header("Content-Disposition: attachment; filename=".basename($file));
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".filesize($file));
    die(file_get_contents($file));
?>

Sehingga hasilnya akan tampak seperti gambar dibawah ini


Untuk enginenya bisa didownload disini,

===DONE!===

Laravel - Relation pada model (belongsToMany)


Hello codedoctors,

Setelah pada tutorial sebelumnya kita sudah membuat relasi tabel hasOne, tutorial kali ini kita akan membuat sebuah relasi tabel pada model dengan fungsi relasi belongsToMany yang berarti banyak field pada suatu tabel mempunyai banyak field pada tabel lain.

Dalam tutorial kali ini kita akan merelasikan antara tabel users dan tabel users itu sendiri dengan menggunakan pivot yang akan kita beri nama followes.

Oke untuk lebih memahaminya kita mulai saja tutorialnya,

Pertama, buat terlebih dahulu tabel pivotnya dengan nama followes, dengan cara php artisan migrate:make create_followes_table pada terminal atau cmd, sehingga akan otomatis membuat file migrate baru dengan nama <tanggal>_create_followes_table.php pada path protected/app/database/migrations/. Kemudian isi dengan code berikut,
<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateFollowesTable extends Migration {

 /**
  * Run the migrations.
  *
  * @return void
  */
 public function up()
 {
  Schema::create('followes', function($table){
   $table->integer('following_user_id')->index('followes_following_user_id');
   $table->integer('follower_user_id')->index('followes_follower_user_id');
   $table->timestamps();
   $table->softDeletes();
   $table->primary(['following_user_id','follower_user_id']);
  });

  Schema::table('followes', function(Blueprint $table)
  {
   $table->foreign('following_user_id', 'followes_ibfk_1')->references('id')->on('users')->onUpdate('CASCADE')->onDelete('CASCADE');
   $table->foreign('follower_user_id', 'followes_ibfk_2')->references('id')->on('users')->onUpdate('CASCADE')->onDelete('CASCADE');
  });
 }

 /**
  * Reverse the migrations.
  *
  * @return void
  */
 public function down()
 {
  Schema::table('followes', function(Blueprint $table)
  {
   $table->dropForeign('followes_ibfk_1');
   $table->dropForeign('followes_ibfk_2');
  });

  Schema::drop('followes');
 }

}

Selanjutnya, buat file seeder baru dengan nama FollowSeeder.php pada path protected/app/database/seeds/ isi dengan code berikut,
<?php
 
class FollowSeeder extends Seeder
{
    public function run()
    {
        DB::table('followes')->delete();
        DB::table('followes')->insert(array (
            array (
                'following_user_id'       => 1,
                'follower_user_id'     => 2,
            ),
            array (
                'following_user_id'       => 2,
                'follower_user_id'     => 1,
            ),
            array (
                'following_user_id'       => 1,
                'follower_user_id'     => 3,
            ),
            array (
                'following_user_id'       => 2,
                'follower_user_id'     => 3,
            ),
        ));
    }
}

Kemudian, edit file seeder UserSeeder.php dan DatabaseSeeder.php pada path protected/app/database/seeds/ edit menjadi seperti ini,
UserSeeder.php
<?php
 
class UserSeeder extends Seeder
{
    public function run()
    {
        DB::table('users')->delete();
        DB::table('users')->insert(array (
            array (
                'id'       => 1,
                'name'     => 'Dracule Mihawk',
                'username' => 'mihawk',
                'email'    => 'mihawk@gmail.com',
                'role_id'     => 1,
                'password' => Hash::make('rahasiakampret'),
            ),
            array (
                'id'       => 2,
                'name'     => 'Trafalgar Law',
                'username' => 'trafa',
                'email'    => 'trafa@gmail.com',
                'role_id'     => 2,
                'password' => Hash::make('rahasiakampret'),
            ),
            array (
                'id'       => 3,
                'name'     => 'Dark King',
                'username' => 'dk',
                'email'    => 'dk@gmail.com',
                'role_id'     => 2,
                'password' => Hash::make('rahasiakampret'),
            ),
        ));
    }
}
Pada UserSeeder diatas kita menambahkan seeder user baru yaitu Dark King.

DatabaseSeeder.php
<?php

class DatabaseSeeder extends Seeder {

 /**
  * Run the database seeds.
  *
  * @return void
  */
 public function run()
 {
  // Eloquent::unguard();
  DB::statement('SET FOREIGN_KEY_CHECKS=0;');

  $this->call('UserSeeder');
  $this->call('AddressSeeder');
  $this->call('RoleSeeder');
  $this->call('CompanySeeder');
  $this->call('FollowSeeder');

  DB::statement('SET FOREIGN_KEY_CHECKS=1;');
  \Cache::flush();
 }

}

Setelah itu, buat file model baru dengan nama Follow.php pada path protected/app/models/ dan isi dengan code berikut,
<?php namespace Model;

class Follow extends \Eloquent {

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

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

Edit file model User.php pada path protected/app/models/ menjadi seperti ini,
<?php namespace Model;

use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;
use Illuminate\Database\Eloquent\Model;
use \Eloquent;

class User extends Eloquent implements UserInterface, RemindableInterface {

 use UserTrait, RemindableTrait;

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

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

 // Relation
 public function addresses()
    {
        return $this->hasMany('Model\Address');
    }

    public function role()
    {
        return $this->belongsTo('Model\Role');
    }

    public function company()
    {
        return $this->hasOne('Model\Company');
    }

    // follower dan following berbeda, coba pahami lebih detail
    public function follower()
    {
        return $this->belongsToMany('Model\User', 'followes', 'following_user_id', 'follower_user_id');
    }

    public function following()
    {
        return $this->belongsToMany('Model\User', 'followes', 'follower_user_id', 'following_user_id');
    }
}
Pada code diatas pahamilah code berikut: belongsToMany('nama_model_yang_akan berelasi', 'nama_tabel_pivot', 'foreign_key', 'relasi_foreign_key').

Edit pula file controller UserController.php pada path protected/app/controllers/relation/ menjadi seperti ini,
<?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;
   $role = $user->role;
   $company = $user->company;
   $follower = $user->follower;
   $following = $user->following;
  }

  return View::make('web.relation.show-user-detail')->with('user', $user);
 }
}

Terakhir edit file blade show-user-detail.blade.php pada path protected/app/views/web/relation/ menjadi seperti ini,
@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>
   <br>
   <table class="table table-bordered table-hover">
      <thead>
       <tr>
      <th>Role ID</th>
      <th>Role Name</th>
        </tr>
      </thead>
      <tbody>
       @if($user['role'])
         <tr>
       <td>{{ $user['role']->id }}</td>
       <td>{{ $user['role']->name }}</td>
         </tr>
        @else
         Role not found
        @endif
       </tbody>
   </table>
   <br>
   <table class="table table-bordered table-hover">
      <thead>
       <tr>
      <th>Company Name</th>
      <th>Position</th>
        </tr>
      </thead>
      <tbody>
       @if($user['company'])
         <tr>
       <td>{{ $user['company']->name }}</td>
       <td>{{ $user['company']->position }}</td>
         </tr>
        @else
         Role not found
        @endif
       </tbody>
   </table>
   <br>
   <table class="table table-bordered table-hover">
      <thead>
       <tr>
      <th>No</th>
      <th>Follower</th>
        </tr>
      </thead>
      <tbody>
       <?php $no=1 ?>
       @forelse($user['follower'] as $follower)
         <tr>
       <td>{{ $no++ }}</td>
       <td>{{ $follower->name }}</td>
         </tr>
        @empty
         Follower not found
        @endif
       </tbody>
   </table>
   <br>
   <table class="table table-bordered table-hover">
      <thead>
       <tr>
      <th>No</th>
      <th>Following</th>
        </tr>
      </thead>
      <tbody>
       <?php $no=1 ?>
       @forelse($user['following'] as $following)
         <tr>
       <td>{{ $no++ }}</td>
       <td>{{ $following->name }}</td>
         </tr>
        @empty
         Follower not found
        @endif
       </tbody>
   </table>
  </div>
 </div>
@stop

Jangan lupa untuk mengcompile composer setelah membuat file model baru dengan cara


Sehingga hasilnya akan tampak seperti ini,


===DONE!===