> For the complete documentation index, see [llms.txt](https://learn.devlabss.my.id/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://learn.devlabss.my.id/laravel/bab-10-relasi-database/10.1-konsep-relasi-one-to-many.md).

# 10.1 Konsep Relasi One-to-Many

## Konsep relasi one-to-many

Yuk kita mulai BAB 10.

Kalau bab sebelumnya fokus pada CRUD dan login, sekarang kita mulai menghubungkan data antar tabel.

Di proyek E-Library, data buku sebenarnya tidak berdiri sendiri.

Buku biasanya punya kategori.

Misalnya:

* novel
* teknologi
* sejarah

Di sinilah konsep **relasi database** mulai dipakai.

### Target belajar BAB 10

Setelah menyelesaikan BAB 10, Anda diharapkan bisa:

* menjelaskan relasi one-to-many
* menambahkan foreign key yang tepat
* menulis `hasMany` dan `belongsTo`
* mengambil data relasi dengan aman
* menampilkan nama kategori pada data buku

### Teori awal dan analogi

Anak RPL, bayangkan di perpustakaan ada rak kategori.

Satu rak bernama **Teknologi** bisa berisi banyak buku.

Satu rak bernama **Novel** juga bisa berisi banyak buku.

Tetapi satu buku biasanya hanya diletakkan pada satu kategori utama.

Nah, pola seperti ini disebut **one-to-many**.

Artinya:

* satu kategori punya banyak buku
* banyak buku berada di bawah satu kategori

### Apa arti one-to-many

Relasi one-to-many adalah hubungan ketika satu data di tabel pertama berhubungan dengan banyak data di tabel kedua.

Pada modul ini:

* satu data **kategori**
* bisa punya banyak data **buku**

Kalau ditulis sederhana:

```
Kategori -> banyak Buku
```

Sebaliknya:

```
Buku -> milik satu Kategori
```

### Kenapa relasi ini penting

Tanpa relasi, data kategori dan buku hanya berdiri terpisah.

Akibatnya, aplikasi tidak tahu:

* buku ini masuk kategori apa
* kategori ini punya buku apa saja

Padahal informasi seperti itu sangat penting untuk aplikasi perpustakaan.

Misalnya saat Anda ingin:

* menampilkan nama kategori pada daftar buku
* memfilter buku berdasarkan kategori
* menghitung jumlah buku pada satu kategori

### Gambaran tabel yang akan dipakai

Supaya lebih mudah dibayangkan, lihat pola sederhananya.

Tabel `kategori`:

* `id`
* `nama_kategori`

Tabel `buku`:

* `id`
* `judul`
* `penulis`
* `penerbit`
* `tahun_terbit`
* `kategori_id`

Kolom `kategori_id` pada tabel `buku` akan menjadi penghubung ke tabel `kategori`.

### Kenapa `kategori_id` diletakkan di tabel `buku`

Karena setiap buku hanya menunjuk ke satu kategori.

Jadi penandanya cukup disimpan pada data buku.

Dengan begitu:

* buku A bisa menunjuk ke kategori 1
* buku B bisa menunjuk ke kategori 1
* buku C bisa menunjuk ke kategori 2

Inilah inti relasi one-to-many.

Satu kategori bisa dipakai banyak buku.

### Langkah praktik ringan sebelum lanjut

Sebelum masuk ke konfigurasi relasi, pahami dulu arah datanya.

{% stepper %}
{% step %}

### Bayangkan arah dari kategori ke buku

Kalau Anda membuka satu kategori, misalnya **Teknologi**, maka Anda bisa melihat banyak buku di dalamnya.

Ini adalah arah:

```
Kategori -> Buku
```

{% endstep %}

{% step %}

### Bayangkan arah dari buku ke kategori

Kalau Anda membuka satu buku, misalnya **Laravel Dasar**, maka Anda bisa menanyakan:

`buku ini termasuk kategori apa`

Ini adalah arah:

```
Buku -> Kategori
```

{% endstep %}

{% step %}

### Pahami bahwa dua arah ini saling terhubung

Dalam Laravel, dua arah ini nanti ditulis di model yang berbeda.

Satu model untuk hubungan punya banyak.

Satu model lagi untuk hubungan milik satu.
{% endstep %}
{% endstepper %}

### Penjelasan pasca-praktik

Sebelum menulis kode, ada satu pola penting yang harus Anda pegang.

Kalau sebuah tabel menyimpan foreign key, biasanya tabel itulah yang **belongsTo** tabel lain.

Pada kasus ini, tabel `buku` menyimpan `kategori_id`.

Berarti:

* model `Buku` akan **belongsTo** `Kategori`
* model `Kategori` akan **hasMany** `Buku`

Ini adalah pasangan yang paling penting di BAB 10.

### Troubleshooting yang paling sering

Masalah yang paling sering muncul di awal BAB 10:

* bingung membedakan `hasMany` dan `belongsTo`
* belum paham kenapa foreign key ada di tabel `buku`
* mengira satu buku bisa langsung punya banyak kategori tanpa tabel tambahan

{% hint style="warning" %}
Jangan tertukar. Pada relasi ini, `Kategori` punya banyak `Buku`, sedangkan `Buku` hanya milik satu `Kategori`.
{% endhint %}

{% hint style="info" %}
Kalau Anda bingung menentukan arah relasi, cek dulu tabel mana yang menyimpan foreign key.
{% endhint %}

### Output yang harus terlihat

Setelah menyelesaikan BAB 10, hasil minimal yang seharusnya sudah ada:

* tabel `kategori` berhasil dibuat
* kolom `kategori_id` tersimpan pada tabel `buku`
* model `Buku` dan `Kategori` terhubung
* nama kategori tampil di halaman daftar buku

### Poin evaluasi bab 10.1

Pastikan Anda sudah memahami poin berikut:

* Saya paham arti relasi one-to-many.
* Saya paham satu kategori bisa punya banyak buku.
* Saya paham satu buku biasanya hanya menunjuk ke satu kategori.
* Saya paham `kategori_id` menjadi penghubung antar tabel.

Jika semuanya sudah jelas, lanjut ke [10.2 Konfigurasi Relasi di Model](/laravel/bab-10-relasi-database/10.2-konfigurasi-relasi-di-model.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://learn.devlabss.my.id/laravel/bab-10-relasi-database/10.1-konsep-relasi-one-to-many.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
