{"id":59828,"date":"2025-12-11T08:26:00","date_gmt":"2025-12-11T01:26:00","guid":{"rendered":"https:\/\/www.rumahweb.com\/journal\/?p=59828"},"modified":"2026-02-13T17:19:49","modified_gmt":"2026-02-13T10:19:49","slug":"cara-membuat-relasi-data-many-to-many-di-laravel","status":"publish","type":"post","link":"https:\/\/www.rumahweb.com\/journal\/cara-membuat-relasi-data-many-to-many-di-laravel\/","title":{"rendered":"Cara Membuat Relasi Data Many To Many Di Laravel"},"content":{"rendered":"\n<p>Dalam pengembangan aplikasi web, pengelolaan dan penghubungan data menjadi hal penting agar sistem berjalan efisien. Laravel sebagai <em>framework<\/em> PHP modern menyediakan fitur relasi data yang kuat dan mudah digunakan. Salah satu relasi dasar yang perlu Anda pahami adalah relasi data <em>many to many<\/em>, terutama sebelum membangun sistem dengan struktur yang lebih kompleks.<\/p>\n\n\n\n<p>Melalui artikel ini, Anda akan mempelajari panduan lengkap mengenai cara membuat relasi data <em>many to many<\/em> 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.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Apa Itu Relasi Many To Many?<\/h2>\n\n\n\n<p>Dalam pengembangan aplikasi web menggunakan Laravel, salah satu relasi database yang paling sering digunakan adalah <em><\/em><em>many to many<\/em>. 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. <\/p>\n\n\n\n<p>Contoh sederhana dari relasi <em><\/em><em>many to many<\/em> adalah ketika satu <em>user<\/em> dapat memiliki banyak <em>roles<\/em>, dan satu <em>role<\/em> dapat dimiliki oleh banyak <em>users<\/em>. Untuk menghubungkan keduanya diperlukan sebuah <em>pivot table<\/em> yang berfungsi sebagai jembatan relasi.<\/p>\n\n\n\n<p>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.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Membuat Relasi Data Many To Many Di Laravel<\/h2>\n\n\n\n<p>Pada bagian ini, kita akan membuat studi kasus relasi data <em><\/em><em>many to many<\/em> 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.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1. Membuat Migration Data<\/h3>\n\n\n\n<p>Pertama kita buat tiga tabel: users, posts, dan pivot table bernama post_user.<\/p>\n\n\n\n<p>Untuk tabel user kita gunakan tabel bawaan saat pertama kali install laravel.<\/p>\n\n\n\n<p>Berikut perintah membuar migration untuk posts :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>php artisan make:migration create_posts_table<\/code><\/pre>\n\n\n\n<p>Isi struktur table posts : <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Schema::create('posts', function (Blueprint $table) {\n    $table-&gt;id();\n    $table-&gt;string('title');\n    $table-&gt;text('content')-&gt;nullable();\n    $table-&gt;timestamps();\n});<\/code><\/pre>\n\n\n\n<p>Berikut perintah membuat migration untuk pivot:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>php artisan make:migration create_post_user_table<\/code><\/pre>\n\n\n\n<p>Isi struktur tabel pivot:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Schema::create('post_user', function (Blueprint $table) {\n    $table-&gt;id();\n    $table-&gt;unsignedBigInteger('user_id');\n    $table-&gt;unsignedBigInteger('post_id');\n    $table-&gt;timestamps();\n    $table-&gt;foreign('user_id')-&gt;references('id')-&gt;on('users')-&gt;onDelete('cascade');\n    $table-&gt;foreign('post_id')-&gt;references('id')-&gt;on('posts')-&gt;onDelete('cascade');\n});\n<\/code><\/pre>\n\n\n\n<p><strong>Catatan<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Penamaan tabel pivot mengikuti konvensi Laravel: singular + singular secara alfabetis (post_user, bukan user_post).<\/li>\n\n\n\n<li>Tabel pivot wajib memiliki dua kolom foreign key.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2. Membuat Model<\/h3>\n\n\n\n<p>Tambahkan relasi pada kedua model.<\/p>\n\n\n\n<p>Model User menggunakan bawaan saat install laravel tetapi anda hanya menambahkan berikut dibawah sebelum penutup } class user.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public function posts()\n{\n    return $this-&gt;belongsToMany(Post::class, 'post_user');\n}<\/code><\/pre>\n\n\n\n<p>Berikut perintah membuat models untuk posts  :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>php artisan make:model Post<\/code><\/pre>\n\n\n\n<p>Isi relasinya ditambahkan sebelum penutup } class posts<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>protected $fillable = \n&#91;\n   'title',\n   'content',\n];\n    \npublic function users()\n{\n   return $this-&gt;belongsToMany(User::class, 'post_user');\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3. Membuat Seeder<\/h3>\n\n\n\n<p>Seeder akan membantu menguji relasi menggunakan data <em>dummy<\/em>. Disini kita bisa gunakan file seeder bawaan laravel yaitu dengan nama DatabaseSeeder.php, dengan isi berikut:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public function run(): void\n    {\n\n        DB::table('users')-&gt;insert(&#91;\n            &#91;\n                'name' =&gt; 'User Satu',\n                'email' =&gt; 'user1@example.com',\n                'password' =&gt; bcrypt('password'),\n            ],\n            &#91;\n                'name' =&gt; 'User Dua',\n                'email' =&gt; 'user2@example.com',\n                'password' =&gt; bcrypt('password'),\n            ],\n        ]);\n\n        DB::table('posts')-&gt;insert(&#91;\n            &#91;\n                'title' =&gt; 'Postingan Pertama',\n                'content' =&gt; 'Ini isi konten pertama.',\n            ],\n            &#91;\n                'title' =&gt; 'Postingan Kedua',\n                'content' =&gt; 'Ini isi konten kedua.',\n            ],\n        ]);\n\n        $users = User::all();\n        $posts = Post::all();\n\n        foreach ($users as $user) {\n            $user-&gt;posts()-&gt;attach(\n                $posts-&gt;pluck('id')-&gt;toArray()\n            );\n        }\n    }<\/code><\/pre>\n\n\n\n<p>Jangan lupa menambahkan baris berikut paling atas setelah pembuka php atau &lt;?php. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>use App\\Models\\Post;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Facades\\DB;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4. Membuat Controller<\/h3>\n\n\n\n<p>Buat <em>controller <\/em>untuk menampilkan relasi data:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>php artisan make:controller PostController<\/code><\/pre>\n\n\n\n<p>Isi method controller :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\nnamespace App\\Http\\Controllers;\nuse Illuminate\\Http\\Request;\nuse App\\Models\\Post;\nuse App\\Models\\User;\n\nclass PostController extends Controller\n{\n    public function index()\n    {\n    $posts = Post::with('users')-&gt;get();\n\n    return view('index', compact('posts'));\n    }\n\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Step 5. Membuat Tampilan View<\/h3>\n\n\n\n<p>Buat file view index.blade.php.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@foreach ($posts as $post)\n    &lt;h3&gt;{{ $post-&gt;title }}&lt;\/h3&gt;\n    &lt;p&gt;Disukai oleh:&lt;\/p&gt;\n    &lt;ul&gt;\n        @foreach ($post-&gt;users as $user)\n            &lt;li&gt;{{ $user-&gt;name }}&lt;\/li&gt;\n        @endforeach\n    &lt;\/ul&gt;\n@endforeach<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Pengujian<\/h2>\n\n\n\n<p>Setelah seluruh langkah selesai, lakukan pengujian:<\/p>\n\n\n\n<p>Jalankan migration:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>php artisan migrate <\/code><\/pre>\n\n\n\n<p>Jalankan seeder:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>php artisan db:seed<\/code><\/pre>\n\n\n\n<p>Jalankan website<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>php artisan serve<\/code><\/pre>\n\n\n\n<p>Akses dengan <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-gridlove-acc-color\">http:\/\/127.0.0.1:8000\/posts<\/mark><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.rumahweb.com\/journal\/wp-content\/uploads\/2025\/12\/Screenshot-2025-12-06-at-21.49.58-scaled.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"284\" src=\"https:\/\/www.rumahweb.com\/journal\/wp-content\/uploads\/2025\/12\/Screenshot-2025-12-06-at-21.49.58-1024x284.png\" alt=\"Contoh Relasi Data Many To Many Di Laravel\" class=\"wp-image-59830\" srcset=\"https:\/\/www.rumahweb.com\/journal\/wp-content\/uploads\/2025\/12\/Screenshot-2025-12-06-at-21.49.58-1024x284.png 1024w, https:\/\/www.rumahweb.com\/journal\/wp-content\/uploads\/2025\/12\/Screenshot-2025-12-06-at-21.49.58-300x83.png 300w, https:\/\/www.rumahweb.com\/journal\/wp-content\/uploads\/2025\/12\/Screenshot-2025-12-06-at-21.49.58-768x213.png 768w, https:\/\/www.rumahweb.com\/journal\/wp-content\/uploads\/2025\/12\/Screenshot-2025-12-06-at-21.49.58-1536x427.png 1536w, https:\/\/www.rumahweb.com\/journal\/wp-content\/uploads\/2025\/12\/Screenshot-2025-12-06-at-21.49.58-2048x569.png 2048w, https:\/\/www.rumahweb.com\/journal\/wp-content\/uploads\/2025\/12\/Screenshot-2025-12-06-at-21.49.58-370x103.png 370w, https:\/\/www.rumahweb.com\/journal\/wp-content\/uploads\/2025\/12\/Screenshot-2025-12-06-at-21.49.58-270x75.png 270w, https:\/\/www.rumahweb.com\/journal\/wp-content\/uploads\/2025\/12\/Screenshot-2025-12-06-at-21.49.58-570x158.png 570w, https:\/\/www.rumahweb.com\/journal\/wp-content\/uploads\/2025\/12\/Screenshot-2025-12-06-at-21.49.58-740x206.png 740w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p><strong>BACA JUGA: <a href=\"https:\/\/blog.rumahweb.com\/contoh-database-dalam-kehidupan-sehari-hari\/\">Contoh Database Dalam Kehidupan Sehari-hari beserta Query<\/a><\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Penutup<\/h2>\n\n\n\n<p>Relasi data <em>many to many<\/em> 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.<\/p>\n\n\n\n<p>Demikian artikel kami tentang cara membuat relasi data <em>many to many<\/em> di Laravel, semoga bermanfaat.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>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, [&hellip;]<\/p>\n","protected":false},"author":357,"featured_media":59918,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[2294],"tags":[1587,135,796,2557,2548],"class_list":{"0":"post-59828","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-database","8":"tag-belajar-laravel","9":"tag-database","10":"tag-laravel","11":"tag-relasi-data","12":"tag-relasi-database"},"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/www.rumahweb.com\/journal\/wp-content\/uploads\/2025\/12\/Banner-Cara-Membuat-Relasi-Data-Many-To-Many-Di-Laravel.webp","jetpack_shortlink":"https:\/\/wp.me\/p8n3G7-fyY","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.rumahweb.com\/journal\/wp-json\/wp\/v2\/posts\/59828","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rumahweb.com\/journal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rumahweb.com\/journal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rumahweb.com\/journal\/wp-json\/wp\/v2\/users\/357"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rumahweb.com\/journal\/wp-json\/wp\/v2\/comments?post=59828"}],"version-history":[{"count":7,"href":"https:\/\/www.rumahweb.com\/journal\/wp-json\/wp\/v2\/posts\/59828\/revisions"}],"predecessor-version":[{"id":61753,"href":"https:\/\/www.rumahweb.com\/journal\/wp-json\/wp\/v2\/posts\/59828\/revisions\/61753"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.rumahweb.com\/journal\/wp-json\/wp\/v2\/media\/59918"}],"wp:attachment":[{"href":"https:\/\/www.rumahweb.com\/journal\/wp-json\/wp\/v2\/media?parent=59828"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rumahweb.com\/journal\/wp-json\/wp\/v2\/categories?post=59828"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rumahweb.com\/journal\/wp-json\/wp\/v2\/tags?post=59828"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}