Tutorial Many To Many Menggunakan Pivot Table di Laravel (Laravel 8)


Assalamu'alaikum Wr. Wb.

          Pada tutorial kali ini kita akan membahas salah satu fitur pada Framework Laravel yaitu relasi many to many. Relasi many to many adalah salah satu jenis relasi yang umum digunakan oleh aplikasi back end untuk merelasikan dua table pada database yang mana table A bisa memiliki atau dimiliki oleh banyak table B begitu juga sebaliknya, umumnya relasi many to many membutuhkan sebuah table bantuan yang biasa disebut pivot table yang berisi id dari table A dan table B, misal yang akan saya gunakan pada tutorial kali ini yaitu table user dan table role, user bisa memiliki banyak role dan role bisa memiliki banyak user,  saya menggunakan Laravel versi 8, untuk laravel versi lain bisa menyesuaikan dengan versi Laravel yang anda gunakan,langsung saja untuk tutorialnya adalah sebagai berikut:

  1. Siapkan project Laravel anda beserta table-table yang akan direlasikan many to many
             
    Hal pertama yang perlu kita lakukan adalah menyiapkan project laravel kita, di sini saya menggunakan Laravel 9, untuk menginstall Laravel versi 8 anda perlu menggunakan php versi 7.x dan menggunakan perintah berikut:

           composer create-project laravel/laravel example-app

            Atau jika anda sudah memiliki project Laravel anda sebelumnya, hal selanjutnya yang perlu anda siapkan adalah database yang akan direlasikan many to many, jika anda belum memilikinya anda dapat membuatnya menggunakan fitur migration, misal pada kasus table user dan role anda dapat membuat file migrasi dengan menggunakan perintah berikut:

    untuk membuat file migration user:

    php artisan make:migration user

    untuk membuat file migration role:

    php artisan make:migration role

            Lalu untuk definisi kolom-kolom nya dapat diisi sesuai kebutuhan, untuk informasi lebih lanjut tentang membuat file migrasi pada Laravel 9 anda dapat membacanya lebih lanjut di sini.
  2. Menyiapkan model yang akan direlasikan
                Langkah selanjutnya yang perlu anda siapkan adalah menyiapkan model dari table-table yang akan direlasikan many to many, misal pada kasus user dan role, untuk membuat model-modelnya anda dapat menggunakan perintah perikut pada directory root project laravel anda pada terminal:

    untuk membuat file model user:

    php artisan make:model User

    untuk membuat file model role:

    php artisan make:model Role

  3. Merelasikan model-model yang akan direlasikan many to many
                 Selanjutnya anda perlu merelasikan table-table yang akan direlasikan many to many menggunakan belongsToMany, pada kasus user dan role contoh kodenya adalah sebagai berikut:

    pada model User:


    <?php

    namespace App\Models;

    use Illuminate\Database\Eloquent\Relations\BelongsToMany;
    ...

    class User extends Authenticatable
    {
      ...
       public function role(): BelongsToMany
      {
            return $this->belongsToMany(Role::class, 'user_roles','role_id','user_id');
      }
       ...
    }

    pada model Role:


    <?php

    namespace App\Models;

    use Illuminate\Database\Eloquent\Relations\BelongsToMany;
    ...

    class Role extends Model
    {
      ...
       public function role(): BelongsToMany
      {
            return $this->belongsToMany(User::class, 'user_roles','user_id','role_id',);
      }
       ...
    }


  4. Menambahkan user baru sekaligus menambahkan data ke tabel pivot user_roles
             
    Selanjutnya kita sudah bisa melakukan penambahan data user disertai dengan penambahan data ke tabel user_roles, contoh kode yang dapat anda terapkan di dalam function pada controller UserController adalah sebagai berikut:

    $new_user = User::find($add_user['id']);
    $new_user->role()->attach('1',['created_at' => now(), 'updated_at' => now()]);

  5. Mengupdate role user menggunakan function sync
               
    Function sync pada fitur pivot tabel Laravel adalah function yang dapat digunakan untuk mereplace data pada tabel pivot dengan data yang baru jika data yang diinput adalah data yang berbeda dengan data yang sudah ada pada pivot table, contoh penggunaanya pada controller UserController dengan  function update_role adalah sebagai berikut:


    $user = User::find($user_id);
    $user->role()->sync($role_id);


          Sebenarnya masih banyak function yang dapat digunakan pada fitur pivot table pada Framework Laravel, yang implementasinya mirip dengan kode pada steps-steps di atas yaitu dengan memanggil modelnya terlebih dahulu hanya saja fungsinya yang berbeda.

Posting Komentar

0 Komentar