Rumahweb Journal
Banner - Cara Membuat Relasi Data Many To Many Di Laravel

Cara Membuat Relasi Data Many To Many Di Laravel

Dalam pengembangan aplikasi web, pengelolaan dan penghubungan data menjadi hal penting agar sistem berjalan efisien. Laravel sebagai framework PHP modern menyediakan fitur relasi data yang kuat dan mudah digunakan. Salah satu relasi dasar yang perlu Anda pahami adalah relasi data many to many, terutama sebelum membangun sistem dengan struktur yang lebih kompleks.

Melalui artikel ini, Anda akan mempelajari panduan lengkap mengenai cara membuat relasi data many to many di Laravel, mulai dari konsep dasar, pembuatan struktur tabel, hingga contoh implementasi praktis yang dapat langsung diterapkan pada proyek nyata. Harapannya, tutorial ini dapat menjadi referensi yang membantu Anda dalam memahami dan mengelola relasi data di Laravel secara lebih efektif.

Apa Itu Relasi Many To Many?

Dalam pengembangan aplikasi web menggunakan Laravel, salah satu relasi database yang paling sering digunakan adalah many to many. Relasi ini menggambarkan hubungan dua arah, di mana satu data pada sebuah tabel dapat terhubung ke banyak data pada tabel lain, dan begitu pula sebaliknya.

Contoh sederhana dari relasi many to many adalah ketika satu user dapat memiliki banyak roles, dan satu role dapat dimiliki oleh banyak users. Untuk menghubungkan keduanya diperlukan sebuah pivot table yang berfungsi sebagai jembatan relasi.

Relasi ini sangat penting terutama pada aplikasi yang membutuhkan pengelompokan data, manajemen akses, manajemen konten, hingga fitur kategori dan tagging. Memahami relasi ini menjadi bagian fundamental dalam tutorial Laravel membuat relasi data untuk mengembangkan aplikasi yang skalabel dan mudah dikelola.

Membuat Relasi Data Many To Many Di Laravel

Pada bagian ini, kita akan membuat studi kasus relasi data many to many antara users dan posts. Misalnya, satu user dapat menyukai banyak postingan, dan satu postingan dapat disukai banyak user. Relasi ini biasanya digunakan untuk fitur likes, favorites, atau saved posts. Kita akan melalui seluruh proses mulai dari migration hingga route.

Pindah Hosting ke Rumahweb Gratis

Step 1. Membuat Migration Data

Pertama kita buat tiga tabel: users, posts, dan pivot table bernama post_user.

Untuk tabel user kita gunakan tabel bawaan saat pertama kali install laravel.

Berikut perintah membuar migration untuk posts :

php artisan make:migration create_posts_table

Isi struktur table posts :

Schema::create('posts', function (Blueprint $table) {
    $table->id();
    $table->string('title');
    $table->text('content')->nullable();
    $table->timestamps();
});

Berikut perintah membuat migration untuk pivot:

php artisan make:migration create_post_user_table

Isi struktur tabel pivot:

Schema::create('post_user', function (Blueprint $table) {
    $table->id();
    $table->unsignedBigInteger('user_id');
    $table->unsignedBigInteger('post_id');
    $table->timestamps();
    $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
});

Catatan:

  • Penamaan tabel pivot mengikuti konvensi Laravel: singular + singular secara alfabetis (post_user, bukan user_post).
  • Tabel pivot wajib memiliki dua kolom foreign key.

Step 2. Membuat Model

Tambahkan relasi pada kedua model.

Model User menggunakan bawaan saat install laravel tetapi anda hanya menambahkan berikut dibawah sebelum penutup } class user.

public function posts()
{
    return $this->belongsToMany(Post::class, 'post_user');
}

Berikut perintah membuat models untuk posts :

php artisan make:model Post

Isi relasinya ditambahkan sebelum penutup } class posts

protected $fillable = 
[
   'title',
   'content',
];
    
public function users()
{
   return $this->belongsToMany(User::class, 'post_user');
}

Step 3. Membuat Seeder

Seeder akan membantu menguji relasi menggunakan data dummy. Disini kita bisa gunakan file seeder bawaan laravel yaitu dengan nama DatabaseSeeder.php, dengan isi berikut:

public function run(): void
    {

        DB::table('users')->insert([
            [
                'name' => 'User Satu',
                'email' => 'user1@example.com',
                'password' => bcrypt('password'),
            ],
            [
                'name' => 'User Dua',
                'email' => 'user2@example.com',
                'password' => bcrypt('password'),
            ],
        ]);

        DB::table('posts')->insert([
            [
                'title' => 'Postingan Pertama',
                'content' => 'Ini isi konten pertama.',
            ],
            [
                'title' => 'Postingan Kedua',
                'content' => 'Ini isi konten kedua.',
            ],
        ]);

        $users = User::all();
        $posts = Post::all();

        foreach ($users as $user) {
            $user->posts()->attach(
                $posts->pluck('id')->toArray()
            );
        }
    }

Jangan lupa menambahkan baris berikut paling atas setelah pembuka php atau <?php.

use App\Models\Post;
use App\Models\User;
use Illuminate\Support\Facades\DB;

Step 4. Membuat Controller

Buat controller untuk menampilkan relasi data:

php artisan make:controller PostController

Isi method controller :

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Post;
use App\Models\User;

class PostController extends Controller
{
    public function index()
    {
    $posts = Post::with('users')->get();

    return view('index', compact('posts'));
    }

}

Step 5. Membuat Tampilan View

Buat file view index.blade.php.

@foreach ($posts as $post)
    <h3>{{ $post->title }}</h3>
    <p>Disukai oleh:</p>
    <ul>
        @foreach ($post->users as $user)
            <li>{{ $user->name }}</li>
        @endforeach
    </ul>
@endforeach

Pengujian

Setelah seluruh langkah selesai, lakukan pengujian:

Jalankan migration:

php artisan migrate 

Jalankan seeder:

php artisan db:seed

Jalankan website

php artisan serve

Akses dengan http://127.0.0.1:8000/posts

Contoh Relasi Data Many To Many Di Laravel

BACA JUGA: Contoh Database Dalam Kehidupan Sehari-hari beserta Query

Penutup

Relasi data many to many adalah salah satu fondasi penting dalam pengembangan aplikasi dengan Laravel. Melalui tutorial Laravel ini, Anda telah mempelajari langkah-langkah lengkap mulai dari membuat migration, model, seeder, controller, hingga view dan route. Pemahaman relasi ini sangat bermanfaat untuk membangun aplikasi yang lebih fleksibel, terstruktur, dan mudah dikembangkan.

Demikian artikel kami tentang cara membuat relasi data many to many di Laravel, semoga bermanfaat.

Bermanfaatkah Artikel Ini?

Klik bintang 5 untuk rating!

Rating rata-rata 0 / 5. Vote count: 0

Belum ada vote hingga saat ini!

Kami mohon maaf artikel ini kurang berguna untuk Anda!

Mari kita perbaiki artikel ini!

Beri tahu kami bagaimana kami dapat meningkatkan artikel ini?

Arief Hidayatullah

Arief Hidayatullah adalah seorang Technical Support di Rumahweb Indonesia yang memiliki minat dan keahlian dalam pengembangan web. Dengan pengalaman dan pengetahuannya di bidang teknologi, Arief memiliki ketertarikan khusus dalam pengembangan web menggunakan Laravel, sebuah framework PHP yang populer. Dengan semangat belajar dan eksplorasi teknologi, Arief terus mengembangkan keterampilannya untuk menciptakan solusi web yang efisien dan inovatif.

banner pop up - Pindah Hosting ke Rumahweb