Days
Hours
Minutes
Seconds

Promo Grand Opening

15% OFF

Khusus Pelanggan Baru

Tutorial Laravel #24 : Relasi One To Many Laravel

 

 

Dalam database, relasi One To Many (Satu ke Banyak) adalah salah satu yang paling umum digunakan. Relasi ini menggambarkan hubungan di mana satu model dapat memiliki banyak model lain, tetapi setiap model yang terkait hanya dimiliki oleh satu model induk.

Contoh klasik dari relasi ini adalah:

  • Satu Post bisa memiliki banyak Comments.
  • Satu User bisa memiliki banyak Posts.
  • Satu Category bisa memiliki banyak Products.

Pada tutorial ini, kita akan mempelajari cara mengimplementasikan relasi One To Many di Laravel menggunakan Eloquent ORM. Kita akan menggunakan contoh relasi antara Category dan Product.


 

Persiapan Awal

 

Pastikan Anda sudah memiliki hal-hal berikut:

  1. Proyek Laravel: Proyek Laravel Anda sudah berjalan dan terhubung ke database.
  2. Migration untuk Tabel: Kita akan membuat dua tabel: categories dan products.

    Migration untuk Tabel categories:

    Bash

    php artisan make:migration create_categories_table --create=categories
    

    Modifikasi file migration create_categories_table di database/migrations:

    PHP

    public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->id();
            $table->string('nama_kategori');
            $table->timestamps();
        });
    }
    
    public function down()
    {
        Schema::dropIfExists('categories');
    }
    

    Migration untuk Tabel products:

    Bash

    php artisan make:migration create_products_table --create=products
    

    Modifikasi file migration create_products_table di database/migrations untuk menambahkan foreign key ke tabel categories.

    PHP

    public function up()
    {
        Schema::create('products', function (Blueprint $table) {
            $table->id();
            $table->foreignId('category_id')->constrained()->onDelete('cascade');
            $table->string('nama_produk');
            $table->integer('harga');
            $table->timestamps();
        });
    }
    
    public function down()
    {
        Schema::dropIfExists('products');
    }
    
    • foreignId('category_id'): Laravel menyediakan metode yang ringkas ini untuk membuat kolom UNSIGNED BIGINT yang sesuai dengan konvensi id di tabel categories.
    • constrained(): Metode ini secara otomatis mendefinisikan foreign key ke tabel yang sesuai dengan nama kolom. Dalam kasus ini, ke tabel categories.
    • onDelete('cascade'): Opsi ini sangat penting. Jika sebuah kategori dihapus, semua produk yang berelasi dengan kategori tersebut juga akan ikut terhapus.

    Jalankan migration Anda:

    php artisan migrate

  3. Model: Buat dua model yang sesuai: Category dan Product.
    Bash

    php artisan make:model Category
    php artisan make:model Product
    

 

Langkah 2: Mendefinisikan Relasi di Model Eloquent

 

Sekarang, kita definisikan relasi One To Many di kedua model.

 

Model Category.php (app/Models/Category.php)

 

Tambahkan method products() yang mendefinisikan bahwa satu kategori dapat memiliki banyak produk.

PHP

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;

class Category extends Model
{
    use HasFactory;

    protected $fillable = ['nama_kategori'];

    /**
     * Get the products for the category.
     */
    public function products(): HasMany
    {
        return $this->hasMany(Product::class);
    }
}
  • hasMany(Product::class): Metode ini menunjukkan bahwa satu Category memiliki banyak Product. Eloquent akan secara otomatis mencari kolom category_id di tabel products.

 

Model Product.php (app/Models/Product.php)

 

Tambahkan method category() yang mendefinisikan relasi kebalikannya.

PHP

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class Product extends Model
{
    use HasFactory;

    protected $fillable = ['category_id', 'nama_produk', 'harga'];

    /**
     * Get the category that owns the product.
     */
    public function category(): BelongsTo
    {
        return $this->belongsTo(Category::class);
    }
}
  • belongsTo(Category::class): Metode ini menunjukkan bahwa satu Product dimiliki oleh satu Category.

 

Langkah 3: Berinteraksi dengan Relasi One To Many

 

Sekarang kita bisa menggunakan relasi ini di controller atau di artisan tinker.

 

Mengambil Data dengan Relasi (Eager Loading)

 

Untuk menghindari masalah N+1 query, gunakan eager loading dengan metode with().

PHP

use App\Models\Category;

// Mengambil semua kategori beserta produk-produknya
$categories = Category::with('products')->get();

foreach ($categories as $category) {
    echo "Kategori: " . $category->nama_kategori . "<br>";
    echo "Daftar Produk:<br>";
    foreach ($category->products as $product) {
        echo "- " . $product->nama_produk . "<br>";
    }
    echo "<hr>";
}

Anda juga bisa mengambil data dari sisi Product.

PHP

use App\Models\Product;

// Mengambil semua produk beserta kategori induknya
$products = Product::with('category')->get();

foreach ($products as $product) {
    echo "Produk: " . $product->nama_produk . "<br>";
    echo "Kategori: " . $product->category->nama_kategori . "<br>";
    echo "<hr>";
}

 

Menambah Data dengan Relasi

 

Anda bisa menambahkan produk baru dan secara otomatis menetapkan relasinya dengan kategori induk.

PHP

use App\Models\Category;

$category = Category::find(1); // Ambil kategori dengan ID 1
$category->products()->create([
    'nama_produk' => 'Baju Kemeja',
    'harga' => 150000
]);

Metode products() di atas akan secara otomatis mengisi category_id pada produk baru dengan id dari kategori induk.


 

Kesimpulan

 

Relasi One To Many adalah fundamental dalam pengembangan database, dan Laravel membuatnya sangat intuitif dengan Eloquent ORM. Dengan mendefinisikan relasi di model, Anda dapat dengan mudah mengambil, menambah, dan mengelola data yang berelasi, tanpa perlu menulis query SQL yang kompleks. Ini membuat kode Anda lebih bersih, mudah dibaca, dan mempercepat proses pengembangan aplikasi web.

Pada tutorial selanjutnya, kita akan membahas relasi One To One yang merupakan kebalikan dari tutorial ini. Tetap ikuti seri tutorial Laravel ini!

Wawasan Terbaru

Gemini_Generated_Image_wfw5uwwfw5uwwfw5
Mengenal Dunia Grafis: Dari Piksel Hingga Vektor, Kekuatan Visual di Era Digital
Gemini_Generated_Image_b6dimfb6dimfb6di
Mengenal Foundation: Kerangka Kerja Front-End Profesional untuk Web Responsif
Gemini_Generated_Image_sx3ztpsx3ztpsx3z
CSS
Mempercantik Website dengan CSS: Seniman di Balik Tampilan Web 🎨
Gemini_Generated_Image_e013qke013qke013
Mengenal HTML: Fondasi dari Setiap Halaman Website 🌐
Gemini_Generated_Image_ldki4nldki4nldki
Menyelami Dunia Coding: Seni Berbicara dengan Komputer
Gemini_Generated_Image_dpvliydpvliydpvl
Menguasai GIT: Fondasi Penting dalam Dunia Pengembangan Perangkat Lunak
Gemini_Generated_Image_sqcib9sqcib9sqci
Tutorial Python #12: Mengenal Jenis-jenis Operator dalam Python
Gemini_Generated_Image_o1bw3do1bw3do1bw
Memahami Tipe Data Dictionary dalam Python
Gemini_Generated_Image_ko4ixfko4ixfko4i
Mengenal Tipe Data Set dalam Python
Gemini_Generated_Image_1xop7m1xop7m1xop
Tuple dalam Python: Pengenalan dan Tutorial

Wawasan Serupa

Gemini_Generated_Image_q0o3sbq0o3sbq0o3
Gemini_Generated_Image_mem6cgmem6cgmem6
Gemini_Generated_Image_ust09gust09gust0
Gemini_Generated_Image_d8a5kwd8a5kwd8a5

Ceritakan Detail Proyekmu

Mulai dari 30K aja, solusi IT kamu langsung jalan tanpa drama.

Kata Mereka Tentang Solusi Coding

Dipercaya oleh lebih dari 200++ client untuk menyelesaikan proyeknya dengan total 250++ proyek dari berbagai jenis proyek