Laravel ORM Eloquent Relationship - One to One

One to One Relationship

adalah relasi atau hubungan antar tabel (entitas) dimana Tabel A hanya memiliki satu kepentingan di tabel B, begitu pula tabel B hanya mempunyai satu kepentingan atau aksi di tabel A

Untuk lebih jelasnya, perhatikan contoh kasus dan gambar berikut ini:

Note!!
disini saya asumsikan bahwa setiap user cuma bisa mempunyai satu alamat tinggal, dan setiap alamat tinggal hanya boleh dimiliki oleh satu user di record tabelnya.

Impelementasi Membuat Laravel Eloquent One to One Relationship

Berikut bahan-bahan yang perlu disiapkan

  1. Membuat 2 tabel, tabel user dan tabel alamat (dengan sistem database migrasi di laravel)
  2. Menentukan Foreign Key nya
  3. Membuat model masing-masing tabelnya
  4. Membuat relasi di dalam Model
  5. Membuat Controllernya
  6. Membuat View nya (tampilan hasil parsing dari controller)
  7. Membuat routenya (untuk mengaktifkan URL yang dibuat)

oke saatnya merakit boomnya
1.      Membuat tabel user dan alamat
  • Sebelumnya hapus dulu semua isi file yang ada di directory database - migrations
  • di terminal ketik: php artisan make:migration UserDanAlamatTable
  • akan tergenerate file di directory d atabase - migrations - UserDanAlamatTable
  • buka file UserDanAlamatTable, isi dengan code berikut di fungsi up() dan down()
public function up(){
  Schema::create('user', function(Blueprint $kolom){
      $kolom->increments('id');
      $kolom->string('nama');
      $kolom->string('email');
  });

  Schema::create('alamat', function(Blueprint $kolom){
      $kolom->increments('id');
      //kolom untuk foreign Key nya
      $kolom->unsignedInteger('user_id')->nullable();
      $kolom->string('kotaAsal');
  });

  //Buat FK tanda dari mana asal kolom user_id
  Schema::table('alamat', function(Blueprint $kolom){
      $kolom->foreign('user_id')
            ->references('id')
            ->on('user')
            ->onDelete('cascade')
            ->onUpdate('cascade');
  });
}

public function down(){
  Schema::dropp('user');
  Schema::dropp('alamat');
}

di terminal ketik: php artisan migrate

INGAT !!
php artisan make:migration customName = perintah untuk membuat file migrasi yang nantinya akan dipakai untuk membuat tabel
php artisan migrate = perintah untuk migrasi semua code kita di atas agar ter generate di database

2.      Membuat foreign Key
code diatas sudah dibuatkan foreign key nya dengan nama kolom user_id sebagai FK, yang fungsinya untuk menghubungkan antara tabel user dengan tabel alamat

3.      Membuat model dari masing-masing tabel
Untuk membuat model di Laravel, menggunakan perintah di terminal:
php artisan make:model User (perintah membuat model User)
php artisan make:model Alamat (perintah membuat model Alamat)

4.      Membuat Relasinya dalam Model
  • Model yang di buat dengan perintah di atas (opsi no 3) defaultnya akan ter generate dalam directory App\namModel .
  • Buka file Model yang sudah d buat dalam dalam directory App\User dan App\Alamat

File User.php
tambahkan code berikut:

  //tanda bahwa model User punya tabel di database dg nama tabel 'user'
  protected $table = 'user';
  
  public function alamat(){
      //tanda bahwa tabel user punya relasi One dg tabel alamat
      return $this->hasOne('App\Alamat','user_id');
  }


2.      Membuat Controllernya
terminal: php artisan:make controller OneToOneController --plain

isi dulu beberapa data di tabel user dan alamat, nantinya saya akan menampilkan data kolom kotaAsal sesuai parameter nama yang dipanggil

Buka file: App\http\controllers\OneToOneController.php
tambahkan code berikut untuk mengolah tabel user dan alamat yang ada di database

use App\User;

public function olahTabelUserAlamat($nama){
    //validasi parameter url nama, parameter nama harus sesuaidg isi di tabel user, jika tidak ada maka akan error/fail
    $user = User::where('nama',$nama)->firstOrFail();

    //parsing variabel $user di view
    //buat File juga di resources-view-Relasi-OneToOne.blade.php
    return view('Relasi.OneToOne', compact('user'));
}

6.      Membuat View nya (parsing dari controller ke view html)
code di atas dibagian kommentar sudah dijelaskan membuat parsing ke view. di step no 6 saya akan fokus membahas bagaimana memanggil kolom yang saya inginkan sesuai dyang ada di tabel user dan alamat

Saya halaman html dengan Format :
  1. Nama = sesuai parameter nama user yang ada di DB
  2. menampilkan kota asal dilahirkan =  berdasarkan relasi one di tabel alamat

Buka file resources\views\Relasi\OneToOne.blade.php
tambahkan code berikut untuk menampilkan sesuai format di atas:

          
Keterangan:
$user->alamat->kotaAsal

$user = berasal dari parsing variabel di controller
alamat = nama method/fungsi yang ada di Model User, fungsinya untuk memanggil apa saja yang ada di dalam tabel relasinya
kotaAsal = nama kolom Kota asal yang ada di tabel alamat karena saya akan menampilkan data kota asal user yang dipanggil di parameter
7.      Membuat Route nya beserta nama parameternya (untuk mengaktifkan url)
tambahkan code berikut di app\http\routes.php

Route::get('oneToOne/{nama}','OneToOneController@olahTabelUserAlamat');


berikut adalah hasilnya dari semua Bom yang saya rakit di atas


Bagaimana? mudah kan?
Selalu di coba sendiri n ulik sendiri dengan mengubah beberapa code agar mastah bisa lebih memahaminya. Dan jangan lupa share ilmu mastah apapun di mastahcode.


2

Search

Blog Tags

Blog & Comments