Relasi Antara Model One to One, One to Many, Many to Many


Dalam tutorial ini, kita akan membahas tentang relasi antara model di Laravel, yaitu One to One, One to Many, dan Many to Many. Relasi ini sangat penting untuk membangun aplikasi yang terstruktur dan mudah dikelola.

1. One to One

Relasi One to One adalah relasi di mana satu model terkait dengan satu model lainnya. Contohnya, jika kita memiliki model User dan Profile, di mana setiap pengguna hanya memiliki satu profil.

Contoh Implementasi

Membuat Model

php artisan make:model User -m
php artisan make:model Profile -m

Migrasi User

// database/migrations/xxxx_xx_xx_create_users_table.php

Schema::create('users', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->timestamps();
});

Migrasi Profile

// database/migrations/xxxx_xx_xx_create_profiles_table.php

Schema::create('profiles', function (Blueprint $table) {
    $table->id();
    $table->foreignId('user_id')->constrained()->onDelete('cascade');
    $table->string('bio');
    $table->timestamps();
});

Menambahkan Relasi di Model

// app/Models/User.php

public function profile()
{
    return $this->hasOne(Profile::class);
}
// app/Models/Profile.php

public function user()
{
    return $this->belongsTo(User::class);
}

Menggunakan Relasi

$user = User::find(1);
$profile = $user->profile; // Mengambil profil dari user

2. One to Many

Relasi One to Many adalah relasi di mana satu model terkait dengan banyak model lainnya. Contohnya, jika kita memiliki model Post dan Comment, di mana satu post dapat memiliki banyak komentar.

Contoh Implementasi

Membuat Model

php artisan make:model Post -m
php artisan make:model Comment -m

Migrasi Post

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

Migrasi Comment

Schema::create('comments', function (Blueprint $table) {
    $table->id();
    $table->foreignId('post_id')->constrained()->onDelete('cascade');
    $table->text('body');
    $table->timestamps();
});

Menambahkan Relasi di Model

// app/Models/Post.php

public function comments()
{
    return $this->hasMany(Comment::class);
}
// app/Models/Comment.php

public function post()
{
    return $this->belongsTo(Post::class);
}

Menggunakan Relasi

$post = Post::find(1);
$comments = $post->comments; // Mengambil semua komentar dari post

3. Many to Many

Relasi Many to Many adalah relasi di mana satu model terkait dengan banyak model lainnya dan sebaliknya. Contohnya, jika kita memiliki model User dan Role, di mana satu user dapat memiliki banyak role dan satu role dapat dimiliki oleh banyak user.

Contoh Implementasi

Membuat Model

php artisan make:model Role -m

Migrasi Role

Schema::create('roles', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->timestamps();
});

Membuat Tabel Pivot

Schema::create('role_user', function (Blueprint $table) {
    $table->id();
    $table->foreignId('user_id')->constrained()->onDelete('cascade');
    $table->foreignId('role_id')->constrained()->onDelete('cascade');
});

Menambahkan Relasi di Model

// app/Models/User.php

public function roles()
{
    return $this->belongsToMany(Role::class);
}
// app/Models/Role.php

public function users()
{
    return $this->belongsToMany(User::class);
}

Menggunakan Relasi

$user = User::find(1);
$roles = $user->roles; // Mengambil semua role dari user

Kesimpulan

Dalam tutorial ini, kita telah membahas tiga jenis relasi antara model di Laravel: One to One, One to Many, dan Many to Many. Relasi ini adalah fondasi penting dalam membangun aplikasi menggunakan Laravel. Dengan memahami dan menerapkan relasi ini, Anda akan dapat mengelola data dengan lebih efektif.