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
- 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
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');
}
terminal: php artisan:make controller OneToOneController --plainisi dulu beberapa data di tabel user dan alamat, nantinya saya akan menampilkan data kolom kotaAsal sesuai parameter nama yang dipanggilBuka file: App\http\controllers\OneToOneController.phptambahkan code berikut untuk mengolah tabel user dan alamat yang ada di databaseuse 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')); }
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 :
- Nama = sesuai parameter nama user yang ada di DB
- 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 controlleralamat = nama method/fungsi yang ada di Model User, fungsinya untuk memanggil apa saja yang ada di dalam tabel relasinyakotaAsal = nama kolom Kota asal yang ada di tabel alamat karena saya akan menampilkan data kota asal user yang dipanggil di parameter
tambahkan code berikut di app\http\routes.phpRoute::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.