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.