Relasi Database Pada Laravel

date 05 Sep 2021
date Sulfikardi
date 72
date Web Programming
Relasi Database Pada Laravel

Relationship Database  merupakan penghubung antar tabel satu dengan tabel lainnya yang mana tabel tersebut memiliki data yang berhubungan, sehingga memudahkan  untuk mengatur operasi suatu database. Pada sebuah database, relasi dihubungkan dengan cara memberikan satu kolom dengan value yang sama dengan tabel yang berhubungan, ini disebut foreign key. Foreign key sendiri merupakan sebuah kolom yang hanya bisa menyimpan data yang sama dengan primary key yang berhubungan dengan tabel tersebut. Artinya foreign key hanya bisa diisi dengan data yang sudah ada pada primary key.

Dalam memanfaatkan database, dikenal ada relasi antar entity atau antar tabel. Penggunaan fitur ini pada database konvesional membutuhkan penggunaan perintah SQL yang relatif panjang dan juga membutuhkan penanganan dari program yang membutuhkan program yang rumit pula. 

Laravel Relationships

Berikut adalah beberapa jenis relasi database yang terdapat pada  Laravel.

  1. Relasi one to one dimana sebuah data pada sebuah tabel hanya memiliki relasi ke sebuah data pada tabel yang lain. Misalnya, sebuah data tabel user memiliki relasi 1 nomer telepon di tabel phone.
  2. Relasi one to many dimana sebuah data pada sebuah tabel memiliki relasi ke beberapa data pada tabel yang lain. Misalnya, sebuah data tabel kategori memiliki relasi banyak data barang di tabel produk. Atau dengan kata lain, 1 kategori memiliki banyak data produk.
  3. Relasi many to one (One to many Inverse) dimana merupakan kebalikan dari relasi one to many. Misalnya kita ingin mengetahui data barang di tabel produk memiliki kategori apa, maka relasi ini yang akan digunakan.
  4. Relasi many to many dimana banyak data pada sebuah tabel memiliki relasi ke banyak data juga pada tabel yang lainnya. Relasi tersebut terbentuk melalui sebuah tabel bantu. Misalnya, banyak data pada tabel siswa memiliki relasi peminjaman ke banyak data pada tabel buku. Relasi tersebut terbentuk dengan tabel bantu bernama tabel transaksi.
     

1. Relasi one to one 

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * Get the phone record associated with the user.
     */
    public function phone()
    {
        return $this->hasOne('App\Phone');
    }
}

Eloquent menentukan foreign key berdasarkan nama model. Dalam hal ini, model Phone diasumsikan memiliki foreign_key default user_id. Untuk menetapkan Foreign Key secara manual, dapat dituliskan sebagai parameter kedua.

return $this->hasOne('App\Phone', 'foreign_key');

 

One To One Inverse

Relationship sebaliknya digunakan untuk  mendapatkan siapa user yang memiliki sebuah phone, perlu didefinisikan relationship sebaliknya (Inverse Relationships), dengan menggunakan method belongsTo

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Phone extends Model
{
    /**
     * Get the user that owns the phone.
     */
    public function user()
    {
        return $this->belongsTo('App\User');
    }
}

Jika foreign key tidak sesuai format yang disediakan laravel, kita dapat memasukkan foregin key pada parameter kedua belongsTo

/**
 * Get the user that owns the phone.
 */
public function user()
{
    return $this->belongsTo('App\User', 'foreign_key');
}

2. Relasi One to Many 

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    /**
     * Get the comments for the blog post.
     */
    public function comments()
    {
        return $this->hasMany('App\Comment');
    }
}

Eloquent menyediakan “dynamic properties”, sehingga methods dapat diakses seolah sebuah property dari model.

$comments = App\Post::find(1)->comments;

foreach ($comments as $comment) {
    //
}

One to Many Inverse

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Comment extends Model
{
    /**
     * Get the post that owns the comment.
     */
    public function post()
    {
        return $this->belongsTo('App\Post');
    }
}

3. Many To Many

Relasi ini juga banyak digunakan dan  penggunaannya sedikit lebih kompleks dibanding 2 tipe relasi sebelumnya.

Contoh penggunaannya adalah di mana terdapat usersroles, dan role_user. Seorang user dapat memiliki banyak role dan sebuah role dapat dimiliki banyak user. role_user merupakan default table perantara atau pivot. Nama table adalah dari kedua table role dan userRelasi didefinisikan dengan menggunakan method belongsToMany.

users
    id - integer
    name - string

roles
    id - integer
    name - string

role_user
    user_id - integer
    role_id - integer

 

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * The roles that belong to the user.
     */
    public function roles()
    {
        return $this->belongsToMany('App\Role');
    }
}
sul.png

Sulfikardi

Web Design & Web Programming

Halo, saya seorang Web Developer yang terbiasa mengembangkan website menggunakan HTML, CSS, Javascript, PHP, MYSQL, dan Laravel. Disini saya akan membagikan pengalaman saya dalam membangun dan mengembangan website yang responsif dan dinamis

Artikel Terkait

Halo, ada yang bisa kami bantu?