Cara menggunakan hasOne dan hasMany di Eloquent Laravel dengan menentukan foreign key dan local key

Cara menggunakan hasOne dan hasMany di Eloquent Laravel dengan menentukan foreign key dan local key

Memahami Foreign Key dan Local Key

Secara default, Laravel menggunakan konvensi penamaan untuk foreign key dan local key dalam sebuah relationship. Namun, terkadang Anda perlu menentukan kunci-kunci ini secara manual jika nama kolom di database Anda berbeda dari konvensi.

  • Foreign Key: Kolom di tabel anak yang merujuk ke primary key di tabel induk.
  • Local Key: Primary key di tabel induk.

Contoh Penggunaan

1. hasOne

Misalkan Anda memiliki model User dan Profile dengan struktur tabel sebagai berikut:

Tabel users:

KolomTipe Data
id BIGINT (UNSIGNED), PRIMARY KEY
nama VARCHAR(255)

Tabel profiles:

KolomTipe Data
id BIGINT (UNSIGNED), PRIMARY KEY
user_id BIGINT (UNSIGNED), FOREIGN KEY (users.id)
bio TEXT

Dalam contoh ini, foreign key di tabel profiles adalah user_id, dan local key di tabel users adalah id.

Berikut adalah cara mendefinisikan relationship hasOne di model User dengan menentukan foreign key dan local key: 

<?php

namespace App\Models;

useIlluminate\Database\Eloquent\Factories\HasFactory;
useIlluminate\Database\Eloquent\Model;

classUserextendsModel{
    useHasFactory;publicfunctionprofile()
    {
        return$this->hasOne(Profile::class, 'user_id', 'id');
    }
}

2. hasMany

Misalkan Anda memiliki model Author dan Post dengan struktur tabel sebagai berikut:

Tabel authors:

KolomTipe Data
id BIGINT (UNSIGNED), PRIMARY KEY
nama VARCHAR(255)

Tabel posts:

KolomTipe Data
id BIGINT (UNSIGNED), PRIMARY KEY
author_id BIGINT (UNSIGNED), FOREIGN KEY (authors.id)
judul VARCHAR(255)

Dalam contoh ini, foreign key di tabel posts adalah author_id, dan local key di tabel authors adalah id.

Berikut adalah cara mendefinisikan relationship hasMany di model Author dengan menentukan foreign key dan local key:

<?php

namespace App\Models;

useIlluminate\Database\Eloquent\Factories\HasFactory;
useIlluminate\Database\Eloquent\Model;

classAuthorextendsModel{
    useHasFactory;publicfunctionposts()
    {
        return$this->hasMany(Post::class, 'author_id', 'id');
    }
}

Penjelasan

  • Argumen pertama di method hasOne atau hasMany adalah nama model yang terkait.
  • Argumen kedua adalah nama kolom foreign key di tabel anak.
  • Argumen ketiga adalah nama kolom local key di tabel induk.

Kesimpulan

Dengan menentukan foreign key dan local key secara eksplisit, Anda dapat menyesuaikan relationship Eloquent Laravel dengan struktur database Anda yang mungkin tidak mengikuti konvensi standar. Ini memberikan fleksibilitas yang lebih besar dalam membangun aplikasi yang kompleks.

Semoga penjelasan ini bermanfaat! Jika Anda memiliki pertanyaan lebih lanjut, jangan ragu untuk bertanya.