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.
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_tableIsi 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_tableIsi 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 PostIsi 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 PostControllerIsi 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>
@endforeachPengujian
Setelah seluruh langkah selesai, lakukan pengujian:
Jalankan migration:
php artisan migrate Jalankan seeder:
php artisan db:seedJalankan website
php artisan serveAkses dengan http://127.0.0.1:8000/posts

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.


