Laravel Eloquent Relationship - One to Many

One to Many Relationship

adalah relasi atau hubungan antar tabel (entitas) dimana Tabel A bisa mempunyai banyak aksi di tabel B, namun tabel B hanya mempunyai satu aksi di tabel A, atau sebaliknya.

Bingung ya? saya juga njelasinya mikir gimana biar bisa paham :D.

Biar lebih jelas, coba saya buatkan contoh gambaranya  :)

One to Many

Sebenernya menentukan Relasi suatu tabel bergantung kasus keperluan mastah dan bagaimana nanti implementasinya mesti sama dengan logika teori yang mastah buat, disini saya asumsikan user bisa posting banyak artikel dan setiap judul artikel bersifat uniqe dan hanya 1 user yang bisa punya judul artikel tersebut.

Laravel Eloquent One to Many Relationship

Sebelom saya mulai senjata yang di persiapkan adalah

  1. Membuat 2 tabel, tabel user dan tabel post (dengan sistem database migrasi di laravel )
  2. Menentukan foreign Key nya
  3. Membuat Model masing-masing tabelnya
  4. Membuat relasinya di dalam Model
  5. Membuat Controllernya
  6. Membuat View nya (tampilan hasil parsing dari controller)
  7. Membuat route nya (untuk test menjalankanya)

Oke, Lets start...

1.      Membuat tabel user dan tabel post

di terminal ketik: php artisan make:migration UserDanPostTable

Sebelomnya, hapus dolo semua isi dari yang ada di directory database - migrations

Buka database-migrations-UserDanPostTable, isi dengan code berikut untuk membuat tabel user dan post

public function up(){
  Schema::create('user', function(Blueprint $kolom){
      $kolom->increments('id');
      $kolom->string('nama');
      $kolom->string('email');
  });

Schema::create('post', function(Blueprint $kolom){

      $kolom->increments('id');
      //kolom untuk Foreign Key nya
      $kolom->unsignedInteger('user_id')->nullable();
      $kolom->string('judulArtikel');
      $kolom->text('isi');
  });

  //Buat FK untuk penanda dari mana asal kolom user_id (optional tp baguse d bikin)
  Schema::table('post', function(Blueprint $kolom){
      $kolom->foreign('user_id')
            ->references('id')
            ->On('user')
            ->onDelete('cascade')
            ->onUpdate('cascade');
  });
}

public function down(){
  Schema::drop('post');
  Schema::drop('user');
}

di terminal ketik: php artisan migrate

INGATT !!
php artisan make:migration customName->  Perintah untuk membuat file migrasi untuk membuat tabel/file migrasi
php artisan migrate->  Perintah untuk migrasi ke database dari tabel yang dibuat
2.      Membuat foreign key
di atas sudah dibuatkan foreign key dengan nama kolom user_id , yang fungsinya untuk menghubungkan antara tabel user dengan tabel post

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

4.      Membuat Relasinya dalam Model
Model yang mastah buat akan tersimpan dalam directory App , buka file app\User dan app\Post.

File User.php
Tambahkan code berikut:
//tanda bahwa model User punya tabel di database dg nama tabel 'user'
protected $table = 'user';


//tanda bahwa tabel User punya relasi Many dg tabel Post
public function post(){
    return $this->hasMany('App\Post');
}


File Post.php
Tambahkan code berikut:
//tanda bahwa model Post punya tabel di database dg nama tabel 'post'
protected $table = 'post';

//tanda bahwa tabel Post punya relasi hubungan dg user
public function user(){
    return $this->belongsTo('App\Post');
}



5.      Membuat Controllernya (optional bisa dilakukan di route)
terminal:  php artisan:make controller OneToManyController --plain

isi dulu beberapa data di tabel  user  dan  post , dan saya ingin menampilkan semua data nama user, judul artikel, dan isi artikel yang ada di kedua tabel

Buka file: app\http\controllers\OneToManyController.php
Tambahkan code berikut untuk mengolah tabel user dan post yang ada di database
 
use App\User;
public function olahTabelUserPost($nama){

    //validasi parameter url nama, parameter nama harus ada sesuai isi di tabel user, jika tidak ada akan error atau fail
    $user = User::where('nama',$nama)->firstOrFail();

    //parsing variabel $user di view. Buat file juga di resources-views-Relasi-OneToMany.blade.php
    return view('Relasi.OneToMany',compact('user'));
}


6.      Membuat View nya (parsing ke tampilan dari controller)
code di atas di bagian comment sudah sedikit di jelaskan membuat parsing ke viewnya. Disini saya akan membahas bagaimana memanggil kolom yang saya inginkan sesuai yang ada di tabel user dan post

Saya akan menampikan semua isi Postingan user, sesuai dengan user yang saya ingin tampilkan, dengan format:

  1. Parameter nya siapa nama user yang akan ditampilkan postingan artikelnya (nama sesuai yang ada di DB, jika parameter nama salah karena nama tidak tersimpan di DB maka akan error)
  2. Posted by: (di ambil dari kolom nama di tabel user)
  3. Judul artikel : (diambil dari kolom judulArtikel di tabel post)
  4. Isi : (di ambil dari kolom isi di tabel Post)

Buka file resources\views\Relasi\OneToMany.blade.php
tambahkan code berikut untuk menampilkan sesuai format diatas



Keterangan:
variabel $user =  berasal dari parsing data dari controller
post = berasal dari hasil nama method post yang ada di Model User, fungsinya untuk memanggil apa saja kolom yang ada di tabel relasi (tabel post)

7.      Membuat Route nya  beserta nama parameternya untuk mengaktifkan url
tambahkan code berikut di app\http\routes.php
Route::get('oneToMany2/{nama}', 'OneToManyController@olahTabelUserPost');

Berikut adalah hasilnya dari codingan di atas



Bagaimana? mudah bukan?
Selalu di coba sendiri dan d utak-atik sendiri dengan mengubah beberapa code agar mastah bisa lebih memahaminya. Dan jangan lupa selalu share ilmu mastah apapun di mastahcode


2

Search

Blog Tags

Blog & Comments