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 :)
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
Oke, Lets start...
1. Membuat tabel user dan tabel post
2. Membuat foreign keydi 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
3. Membuat Model dari masing-masing tabeldi atas sudah dibuatkan foreign key dengan nama kolom user_id , yang fungsinya untuk menghubungkan antara tabel user dengan tabel post
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'); }
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'));
}
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:
- 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)
- Posted by: (di ambil dari kolom nama di tabel user)
- Judul artikel : (diambil dari kolom judulArtikel di tabel post)
- 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');
Bagaimana? mudah bukan?Berikut adalah hasilnya dari codingan di atas