🎯 Tujuan

Panduan ini bertujuan untuk memberikan instruksi detail dalam mengimplementasikan relasi yang umum digunakan di Laravel. Dengan menggunakan Eloquent, Anda dapat lebih mudah mengelola data yang berhubungan melalui model, membantu memisahkan logika bisnis dari pengaturan data, dan memaksimalkan pengelolaan database relasional dalam aplikasi yang kompleks.

Konteks

Relasi yang dibahas ini sering digunakan dalam aplikasi sosial media, sistem manajemen, atau platform kolaborasi. Tutorial ini difokuskan pada pengelolaan relasi antar model menggunakan Laravel, seperti One-to-Many, Many-to-One, dan Many-to-Many.

🪵 Hal yang Diperlukan

  1. Laravel Framework (disarankan menggunakan versi terbaru).
  2. Konfigurasi database yang sudah terhubung dalam file .env.
  3. Struktur database dengan tabel users dan follows:

📹 Video Tutorial

📋 Langkah-Langkah

  1. One-to-Many (User dan Follows)

    Relasi ini digunakan untuk merepresentasikan hubungan satu pengguna (User) yang bisa memiliki banyak relasi Follow. Berikut adalah contoh implementasi untuk relasi satu pengguna terhadap beberapa follower dan following:

    php
    Copy code
    // Pada model User.php
    
    public function follows()
    {
        return $this->hasMany(Follow::class, 'follower_id');
    }
    
    public function followers()
    {
        return $this->hasMany(Follow::class, 'following_id');
    }
    
    

    Penjelasan: Dalam konteks aplikasi sosial media, relasi One-to-Many ini menggambarkan bahwa satu User dapat memiliki banyak Follow (baik sebagai pengikut atau yang diikuti).

  2. Many-to-Many (User dan Following)

    Gunakan relasi Many-to-Many untuk menciptakan relasi antara User sebagai pengikut (follower) dan yang diikuti (following), dengan pivot table follows:

    php
    Copy code
    public function following()
    {
        return $this->belongsToMany(User::class, 'follows', 'follower_id', 'following_id');
    }
    

    Penjelasan: Relasi Many-to-Many ini memungkinkan setiap User untuk mengikuti banyak User lain, menggunakan tabel pivot follows yang mengaitkan follower_id dengan following_id.

  3. Many-to-Many dengan Kondisi (User dan Friends)

    Relasi friends memungkinkan Anda mengakses daftar teman mutual-following. Artinya, dua pengguna dianggap teman jika mereka saling mengikuti.

    php
    Copy code
    public function friends()
    {
        return $this->belongsToMany(User::class, 'follows', 'follower_id', 'following_id')
            ->wherePivot('following_id', '!=', $this->id)
            ->whereExists(function ($query) {
                $query->select(\\DB::raw(1))
                    ->from('follows as f')
                    ->whereRaw('f.follower_id = follows.following_id')
                    ->whereRaw('f.following_id = follows.follower_id');
            });
    }
    

    Penjelasan: Relasi friends ini hanya mengembalikan User yang mengikuti pengguna tertentu, dan juga diikuti kembali oleh pengguna tersebut. Dengan whereExists, kita menambahkan kondisi untuk mengecek hubungan mutual-following.

Final Checkpoint

Setelah mendefinisikan relasi, pastikan seluruh relasi berjalan lancar dengan mencoba kode berikut di Laravel Tinker:

php
Copy code
php artisan tinker

// Akses pengguna tertentu dan relasi-relasinya
$user = User::find(1);

// Mengakses Followers dari User
$followers = $user->followers;

// Mengakses Following dari User
$following = $user->following;

// Mengakses daftar teman User
$friends = $user->friends;

Jika tidak ada error dan data ditampilkan dengan benar, berarti relasi telah diimplementasikan sesuai dengan definisi.