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:
| Kolom | Tipe Data |
|---|---|
| id | BIGINT (UNSIGNED), PRIMARY KEY |
| nama | VARCHAR(255) |
Tabel profiles:
| Kolom | Tipe 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:
| Kolom | Tipe Data |
|---|---|
| id | BIGINT (UNSIGNED), PRIMARY KEY |
| nama | VARCHAR(255) |
Tabel posts:
| Kolom | Tipe 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
hasOneatauhasManyadalah 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.