m.techreview.click
  • Website
  • Hosting
  • Indonesia
  • Laravel
  • Bisnis
  • Development
No Result
View All Result
m.techreview.click
  • Website
  • Hosting
  • Indonesia
  • Laravel
  • Bisnis
  • Development
No Result
View All Result
m.techreview.click
No Result
View All Result
Home Contoh

Laravel Eloquent Relationship One to Many: Contoh Studi Kasus Lengkap

Seraphina by Seraphina
September 12, 2025
in Contoh, Database, Eloquent, Laravel, Relasi
0
Share on FacebookShare on Twitter

Laravel Eloquent ORM adalah fitur yang sangat kuat dalam framework Laravel, memungkinkan kita berinteraksi dengan database secara intuitif dan efisien. Salah satu jenis relasi yang paling umum digunakan adalah One to Many Relationship. Artikel ini akan membahas secara mendalam mengenai One to Many Relationship dalam Laravel Eloquent, lengkap dengan contoh studi kasus yang mudah dipahami. Kita akan kupas tuntas mulai dari definisi, implementasi, hingga best practices-nya. Siap? Mari kita mulai!

Apa Itu Laravel Eloquent One to Many Relationship? Definisi dan Konsep Dasar

Secara sederhana, One to Many Relationship menggambarkan relasi di mana satu record pada sebuah tabel (misalnya, ‘Author’) dapat memiliki banyak record terkait pada tabel lain (misalnya, ‘Posts’). Bayangkan seorang penulis (Author) yang bisa menulis banyak artikel (Posts). Itulah esensi dari One to Many Relationship.

Definisi: Satu model (parent) memiliki banyak model lain (children).

Contoh Konkret:

Related Post

Contoh Project Laravel Sederhana untuk Belajar: Implementasi Kode Mudah

September 12, 2025

Laravel Package Terbaik untuk Autentikasi Pengguna: Keamanan Website Anda

September 11, 2025

Cara Membuat API dengan Laravel untuk Mobile App: Panduan Praktis

September 11, 2025

Tutorial Laravel untuk Pemula Bahasa Indonesia Lengkap: Langkah Awal Anda

September 11, 2025
  • Author (Penulis) – Posts (Artikel): Seorang penulis dapat menulis banyak artikel.
  • Category (Kategori) – Products (Produk): Satu kategori dapat memiliki banyak produk.
  • Post (Artikel) – Comments (Komentar): Satu artikel dapat memiliki banyak komentar.

Dalam database relasional, relasi ini diimplementasikan menggunakan foreign key. Tabel “child” (misalnya, posts) akan memiliki kolom yang menyimpan ID dari tabel “parent” (misalnya, authors). Kolom ini disebut foreign key, yang menunjuk ke primary key tabel “parent”.

Membuat Migrasi Database: Mempersiapkan Tabel dan Foreign Key

Langkah pertama dalam mengimplementasikan One to Many Relationship adalah menyiapkan struktur database. Kita akan membuat dua tabel: authors dan posts. Tabel posts akan memiliki kolom author_id sebagai foreign key yang mengacu pada id di tabel authors.

Gunakan perintah artisan untuk membuat migrasi:

php artisan make:migration create_authors_table
php artisan make:migration create_posts_table

Kemudian, edit file migrasi yang telah dibuat:

database/migrations/xxxx_xx_xx_create_authors_table.php:

<?php

use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;

class CreateAuthorsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('authors', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('authors');
    }
}

database/migrations/xxxx_xx_xx_create_posts_table.php:

<?php

use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;

class CreatePostsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('author_id'); // Foreign Key
            $table->string('title');
            $table->text('content');
            $table->timestamps();

            $table->foreign('author_id')->references('id')->on('authors')->onDelete('cascade'); // Constraint
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('posts');
    }
}

Penjelasan:

  • $table->unsignedBigInteger('author_id');: Mendefinisikan kolom author_id sebagai unsigned big integer untuk menyimpan ID penulis.
  • $table->foreign('author_id')->references('id')->on('authors')->onDelete('cascade');: Mendefinisikan foreign key author_id yang mengacu pada kolom id pada tabel authors. onDelete('cascade') berarti jika seorang penulis dihapus, semua artikelnya juga akan dihapus (pilihan ini tergantung kebutuhan aplikasi).

Jalankan migrasi:

php artisan migrate

Mendefinisikan Eloquent Relationships: Model Author dan Post

Setelah struktur database siap, kita perlu mendefinisikan relasi One to Many di model Eloquent. Buat model Author dan Post menggunakan perintah artisan:

php artisan make:model Author
php artisan make:model Post

Kemudian, edit file model:

app/Models/Author.php:

<?php

namespace AppModels;

use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
use IlluminateDatabaseEloquentRelationsHasMany;

class Author extends Model
{
    use HasFactory;

    protected $fillable = [
        'name',
        'email',
    ];

    /**
     * Get all of the posts for the Author
     *
     * @return IlluminateDatabaseEloquentRelationsHasMany
     */
    public function posts(): HasMany
    {
        return $this->hasMany(Post::class);
    }
}

app/Models/Post.php:

<?php

namespace AppModels;

use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
use IlluminateDatabaseEloquentRelationsBelongsTo;

class Post extends Model
{
    use HasFactory;

    protected $fillable = [
        'author_id',
        'title',
        'content',
    ];

    /**
     * Get the author that owns the Post
     *
     * @return IlluminateDatabaseEloquentRelationsBelongsTo
     */
    public function author(): BelongsTo
    {
        return $this->belongsTo(Author::class);
    }
}

Penjelasan:

  • Author::posts(): hasMany(Post::class): Mendefinisikan relasi One to Many. Seorang Author memiliki banyak Post. Post::class merujuk ke model Post.
  • Post::author(): belongsTo(Author::class): Mendefinisikan relasi Belongs To. Sebuah Post hanya dimiliki oleh satu Author. Author::class merujuk ke model Author.

Perhatikan penggunaan type hinting dengan HasMany dan BelongsTo. Ini akan membantu IDE untuk memberikan saran dan autocompletion yang lebih baik.

Menggunakan Eloquent Relationships: Mengakses Data dengan Mudah

Setelah relasi didefinisikan, kita dapat dengan mudah mengakses data yang terkait.

Mengakses semua artikel dari seorang penulis (Eager Loading):

$author = Author::with('posts')->find(1); // Eager loading untuk meningkatkan performa

if ($author) {
    echo "Penulis: " . $author->name . "<br>";
    echo "Artikel:<br>";

    foreach ($author->posts as $post) {
        echo "- " . $post->title . "<br>";
    }
} else {
    echo "Penulis tidak ditemukan.";
}

Penjelasan:

  • Author::with('posts')->find(1): Menggunakan Eager Loading untuk mengambil data posts bersamaan dengan data author dalam satu query. Ini meningkatkan performa karena mengurangi jumlah query ke database (N+1 problem avoidance).
  • $author->posts: Mengakses koleksi Post yang terkait dengan Author menggunakan relasi yang telah didefinisikan.

Mengakses data penulis dari sebuah artikel:

$post = Post::find(1);

if ($post) {
    echo "Judul Artikel: " . $post->title . "<br>";
    echo "Penulis: " . $post->author->name . "<br>"; // Lazy Loading
} else {
    echo "Artikel tidak ditemukan.";
}

Penjelasan:

  • $post->author: Mengakses data Author yang terkait dengan Post menggunakan relasi yang telah didefinisikan. Ini menggunakan Lazy Loading, di mana data Author hanya diambil ketika diakses. Jika kita sering mengakses data Author dari Post, sebaiknya gunakan Eager Loading untuk meningkatkan performa.

Menyimpan Data: Membuat dan Mengaitkan Model dengan Relasi

Kita juga dapat menggunakan relasi untuk menyimpan data dengan mudah.

Membuat artikel baru untuk seorang penulis yang sudah ada:

$author = Author::find(1);

if ($author) {
    $post = new Post([
        'title' => 'Judul Artikel Baru',
        'content' => 'Isi Artikel Baru',
    ]);

    $author->posts()->save($post); // Mengaitkan artikel dengan penulis
    echo "Artikel berhasil disimpan.";
} else {
    echo "Penulis tidak ditemukan.";
}

Penjelasan:

  • $author->posts()->save($post): Menyimpan model Post dan secara otomatis mengaitkannya dengan Author dengan mengisi kolom author_id pada tabel posts.

Membuat artikel baru dan mengaitkannya dengan penulis menggunakan create():

$author = Author::find(1);

if ($author) {
    $post = $author->posts()->create([
        'title' => 'Judul Artikel Baru Lainnya',
        'content' => 'Isi Artikel Baru Lainnya',
    ]);

    echo "Artikel berhasil disimpan.";
} else {
    echo "Penulis tidak ditemukan.";
}

Penjelasan:

  • $author->posts()->create(...): Membuat model Post dan secara otomatis mengaitkannya dengan Author dalam satu langkah. Ini lebih ringkas daripada menggunakan save().

Menggunakan Eloquent Relationship: Querying dengan Constraints

Eloquent Relationships memungkinkan kita untuk melakukan querying dengan batasan (constraints) yang kompleks.

Mencari penulis yang memiliki artikel dengan judul tertentu:

$authors = Author::whereHas('posts', function ($query) {
    $query->where('title', 'like', '%Judul Tertentu%');
})->get();

foreach ($authors as $author) {
    echo "Penulis: " . $author->name . "<br>";
}

Penjelasan:

  • Author::whereHas('posts', function ($query) { ... }): Menggunakan whereHas untuk memfilter Author berdasarkan kondisi pada relasi posts.
  • $query->where('title', 'like', '%Judul Tertentu%'): Menambahkan kondisi untuk mencari artikel dengan judul yang mengandung “Judul Tertentu”.

Mencari artikel yang ditulis oleh penulis dengan nama tertentu:

$posts = Post::whereHas('author', function ($query) {
    $query->where('name', 'like', '%Nama Penulis%');
})->get();

foreach ($posts as $post) {
    echo "Judul Artikel: " . $post->title . "<br>";
}

Penjelasan:

  • Post::whereHas('author', function ($query) { ... }): Menggunakan whereHas untuk memfilter Post berdasarkan kondisi pada relasi author.
  • $query->where('name', 'like', '%Nama Penulis%'): Menambahkan kondisi untuk mencari penulis dengan nama yang mengandung “Nama Penulis”.

Studi Kasus Lanjutan: Implementasi di E-commerce

Mari kita terapkan One to Many Relationship pada studi kasus e-commerce. Kita akan memiliki dua model: Category dan Product. Satu kategori dapat memiliki banyak produk.

Migrasi Database (sudah dijelaskan di atas, hanya perlu disesuaikan nama tabel dan kolom):

Buat migrasi untuk tabel categories dan products, pastikan products memiliki foreign key yang menunjuk ke categories.

Model Eloquent:

app/Models/Category.php:

<?php

namespace AppModels;

use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
use IlluminateDatabaseEloquentRelationsHasMany;

class Category extends Model
{
    use HasFactory;

    protected $fillable = ['name'];

    public function products(): HasMany
    {
        return $this->hasMany(Product::class);
    }
}

app/Models/Product.php:

<?php

namespace AppModels;

use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
use IlluminateDatabaseEloquentRelationsBelongsTo;

class Product extends Model
{
    use HasFactory;

    protected $fillable = ['category_id', 'name', 'price'];

    public function category(): BelongsTo
    {
        return $this->belongsTo(Category::class);
    }
}

Penggunaan:

// Mengakses semua produk dalam kategori tertentu
$category = Category::with('products')->find(1);

if ($category) {
    echo "Kategori: " . $category->name . "<br>";
    echo "Produk:<br>";

    foreach ($category->products as $product) {
        echo "- " . $product->name . " - Rp " . number_format($product->price) . "<br>";
    }
}

// Mencari produk dengan harga di atas Rp 100.000 dalam kategori tertentu
$products = Product::where('price', '>', 100000)
    ->whereHas('category', function ($query) {
        $query->where('name', 'Elektronik');
    })->get();

foreach ($products as $product) {
    echo "Produk: " . $product->name . " - Rp " . number_format($product->price) . "<br>";
}

Contoh ini menunjukkan bagaimana One to Many Relationship dapat digunakan untuk memodelkan relasi antara kategori dan produk dalam aplikasi e-commerce, memungkinkan kita untuk mengakses dan memanipulasi data dengan mudah.

Best Practices dan Tips Penggunaan Eloquent Relationships

Berikut adalah beberapa best practices dan tips untuk menggunakan Eloquent Relationships secara efektif:

  • Gunakan Eager Loading: Kurangi jumlah query ke database dengan menggunakan Eager Loading (with()) ketika Anda perlu mengakses data relasi.
  • Pahami N+1 Problem: Pahami dan hindari masalah N+1 query yang dapat memperlambat aplikasi Anda.
  • Gunakan Type Hinting: Gunakan type hinting pada method relasi (misalnya, HasMany, BelongsTo) untuk meningkatkan readability dan mendapatkan manfaat dari autocompletion IDE.
  • Definisikan fillable atau guarded: Selalu definisikan atribut $fillable atau $guarded pada model untuk mencegah mass assignment vulnerabilities.
  • Manfaatkan Polymorphic Relationships: Jika Anda memiliki relasi yang lebih kompleks, pertimbangkan untuk menggunakan Polymorphic Relationships.
  • Gunakan Caching: Cache data yang sering diakses untuk meningkatkan performa.

Kesimpulan: Kekuatan dan Fleksibilitas Eloquent Relationships

One to Many Relationship adalah salah satu fitur paling penting dalam Laravel Eloquent. Dengan memahami konsep dan implementasinya, Anda dapat membangun aplikasi yang lebih terstruktur, efisien, dan mudah dikelola. Artikel ini telah membahas secara mendalam mengenai One to Many Relationship dalam Laravel, mulai dari definisi dasar hingga contoh studi kasus yang lebih kompleks. Dengan mengikuti best practices dan tips yang telah diberikan, Anda dapat memanfaatkan kekuatan Eloquent Relationships secara maksimal. Selamat mencoba dan semoga berhasil!

Tags: ContohDatabaseEloquentLaravelModelOne-to-Many RelationshipORMPHPStudi Kasustutorial
Seraphina

Seraphina

Related Posts

Belajar

Contoh Project Laravel Sederhana untuk Belajar: Implementasi Kode Mudah

by Finnian
September 12, 2025
Authentication

Laravel Package Terbaik untuk Autentikasi Pengguna: Keamanan Website Anda

by Finnian
September 11, 2025
API

Cara Membuat API dengan Laravel untuk Mobile App: Panduan Praktis

by Jasper
September 11, 2025

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recommended

Cara Membuat Website Sederhana dengan HTML CSS Indonesia: Tutorial Lengkap

August 22, 2025

Website Sederhana HTML CSS: Panduan Lengkap Membuat Website Statis Bahasa Indonesia

September 3, 2025

Tips Mengatasi Error Umum dalam Laravel Indonesia: Solusi Cepat dan Tepat

August 24, 2025

Belajar HTML CSS JavaScript untuk Pemula: Langkah Awal Menjadi Web Developer

March 20, 2025

Laravel Eloquent Relationship One to Many: Contoh Studi Kasus Lengkap

September 12, 2025

Contoh Project Laravel Sederhana untuk Belajar: Implementasi Kode Mudah

September 12, 2025

Laravel Package Terbaik untuk Autentikasi Pengguna: Keamanan Website Anda

September 11, 2025

Cara Membuat API dengan Laravel untuk Mobile App: Panduan Praktis

September 11, 2025

m.techreview.click

Our media platform offers reliable news and insightful articles. Stay informed with our comprehensive coverage and in-depth analysis on various topics.
Read more »

Recent Posts

  • Laravel Eloquent Relationship One to Many: Contoh Studi Kasus Lengkap
  • Contoh Project Laravel Sederhana untuk Belajar: Implementasi Kode Mudah
  • Laravel Package Terbaik untuk Autentikasi Pengguna: Keamanan Website Anda

Categories

  • 2024
  • 24 Jam
  • Adaptasi
  • Admin
  • Agency
  • AI
  • Akses
  • Aktif
  • Akuntansi
  • Algoritma
  • Analisis
  • Anggaran
  • Antarmuka
  • Antisipasi
  • API
  • Aplikasi
  • Artikel
  • Asynchronous
  • Audio
  • Authentication
  • Authorization
  • Backend
  • Background
  • Backup
  • Bahasa
  • Bandwidth
  • Bank
  • Bantuan
  • Belajar
  • Bergabung
  • Biaya
  • Bisnis
  • Blog
  • Blogger
  • Bootstrap
  • Branding
  • Budget
  • Bukti
  • Cepat
  • Chatbot
  • Cloud
  • Coding
  • Company
  • Contoh
  • cPanel
  • CRM
  • CRUD
  • CSS
  • Custom
  • Dampak
  • Dasar
  • Dashboard
  • Data
  • Database
  • Deployment
  • Desain
  • Design
  • Detail
  • Developer
  • Development
  • Digital
  • Diskusi
  • Dokumentasi
  • Domain
  • Download
  • Downtime
  • Dukungan
  • E-commerce
  • Efektif
  • Efisiensi
  • Elementor
  • Eloquent
  • Email
  • Engine
  • Enterprise
  • Error
  • Error generating categories
  • Estimasi
  • Etika
  • Event
  • Faktor
  • Fitur
  • Fleksibel
  • Fortify
  • Foto
  • Framework
  • Freelance
  • Freelancer
  • Fresh
  • Frontend
  • Fungsi
  • Gambar
  • Garansi
  • Gratis
  • GTmetrix
  • Hacker
  • Harga
  • Hemat
  • Here are 5 categories derived from the article title "Hosting dengan Dukungan Pelanggan 24 Jam: Bantuan Kapanpun Dibutuhkan": Hosting
  • Here are 5 categories derived from the article title "Hosting Domain Murah Indonesia dengan Proteksi DDoS Gratis: Solusi Terbaik untuk Website Anda": Hosting
  • Here are 5 categories derived from the article title "Hosting VPS Murah untuk Developer Indonesia: Fleksibilitas dan Kontrol Penuh": Hosting
  • Here are 5 categories derived from the provided list and the article titles: Company
  • Hosting
  • HTML
  • Hybrid
  • Impian
  • Implementasi
  • Indonesia
  • Inovasi
  • Inspirasi
  • Instalasi
  • Integrasi
  • Interaktif
  • Internasional
  • Investasi
  • Jakarta
  • Jasa
  • JavaScript
  • Jetstream
  • Kampanye
  • Kantor
  • Kapasitas
  • Karir
  • Karyawan
  • Keamanan
  • Keandalan
  • Keberhasilan
  • Kebutuhan
  • Kecepatan
  • Kecil
  • Kehidupan
  • Kemampuan
  • Kemudahan
  • Kerja
  • Kesalahan
  • Kesehatan
  • Keterampilan
  • Keuntungan
  • Keyword
  • Klien
  • Kode
  • Kompetensi
  • Komponen
  • Komunikasi
  • Komunitas
  • Koneksi
  • Konfigurasi
  • Konsep
  • Konten
  • Konversi
  • Kreativitas
  • Kredibilitas
  • Kriteria
  • Kualitas
  • Kurikulum
  • Langkah
  • Laravel
  • Latihan
  • Layanan
  • Lengkap
  • Library
  • Listener
  • Livewire
  • Logika
  • Logo
  • Lokal
  • Loyalitas
  • Machine Learning
  • Mahasiswa
  • Mahir
  • Maintenance
  • Manajemen
  • Manfaat
  • Manufaktur
  • Marketing
  • Masa Depan
  • Masyarakat
  • Media Sosial
  • Medis
  • Memilih
  • Menarik
  • Meningkatkan
  • Metrik
  • Middleware
  • Midtrans
  • Migrasi
  • Migration
  • Mobile
  • Modern
  • Murah
  • MySQL
  • Node.js
  • NVMe
  • Observer
  • Online
  • Operasional
  • Optimasi
  • ORM
  • Otentikasi
  • Otomatis
  • Otomatisasi
  • Package
  • Panduan
  • Pasar
  • Pekerjaan
  • Pelajar
  • Pelajaran
  • Pelanggan
  • Pelatihan
  • Peluang
  • Pemahaman
  • Pemanfaatan
  • Pemasaran
  • Pembayaran
  • Pembuatan
  • Pemilihan
  • Pemrograman
  • Pemula
  • Penawaran
  • Pengalaman
  • Pengantar
  • Pengembangan
  • Pengenalan
  • Pengguna
  • Penggunaan
  • Pengujian
  • Pengukuran
  • Penipuan
  • Penjualan
  • Penulisan
  • Penyimpanan
  • Peran
  • Perbandingan
  • Perbedaan
  • Performa
  • Performance
  • Peringkat
  • Perlindungan
  • Pertimbangan
  • Pertumbuhan
  • Perusahaan
  • PHP
  • Pilihan
  • Platform
  • Policy
  • Portofolio
  • Potensi
  • Praktik
  • Praktis
  • Prediksi
  • Pribadi
  • Process
  • Produktivitas
  • Profesional
  • Profil
  • Profile
  • Project
  • Promosi
  • Proses
  • Proyek
  • Python
  • Queue
  • React
  • Real-Time
  • Redis
  • Referensi
  • Rekomendasi
  • Relasi
  • Relevansi
  • Remote
  • Reputasi
  • Request
  • Responsif
  • Responsive
  • Responsive Design
  • Retail
  • Retensi
  • Review
  • Riset
  • Ritel
  • Roadmap
  • Saham
  • Sanctum
  • Sederhana
  • Seeding
  • Sehari-hari
  • SEO
  • Sertifikat
  • Server
  • Sharing
  • Sinkronisasi
  • Sistem
  • Skalabilitas
  • Skill
  • Software
  • Solusi
  • Space
  • SSL
  • Startup
  • Strategi
  • Struktur
  • Studi Kasus
  • Sukses
  • Support
  • Surabaya
  • Tampilan
  • Tanggung Jawab
  • Tantangan
  • Teknis
  • Teknologi
  • Teks
  • Template
  • Tenaga Kerja
  • Terbaik
  • Terjangkau
  • Terjemahan
  • Terlengkap
  • Terpercaya
  • Terstruktur
  • Tim
  • Tips
  • Toko
  • Tools
  • Traffic
  • Training
  • Transaksi
  • Transfer
  • Transkripsi
  • Tren
  • Trik
  • Troubleshooting
  • Tugas
  • Tutorial
  • Uji Coba
  • UKM
  • UMKM
  • Umum
  • Unlimited
  • Upgrade
  • Uptime
  • URL
  • User Experience
  • User-Friendly
  • Video
  • Visual
  • VPS
  • Vue.js
  • Wajah
  • Web
  • Web Development
  • Website
  • WHM
  • Windows
  • WooCommerce
  • WordPress
  • XAMPP

Resource

  • About us
  • Contact Us
  • Privacy Policy

© 2024 m.techreview.click.

No Result
View All Result
  • Website
  • Hosting
  • Indonesia
  • Laravel
  • Bisnis
  • Development

© 2024 m.techreview.click.