Polymorphism adalah teknik relasi fleksibel
Menerapkan Asosiasi polymorphism di Ruby on Rails dan Laravel
Asosiasi polymorphism adalah fitur yang kuat dan serbaguna dalam kerangka pengembangan web seperti Ruby on Rails dan Laravel. Mereka memungkinkan pengembang untuk menciptakan hubungan antar model dengan cara yang fleksibel dan efisien. Dalam postingan blog ini, kita akan mengeksplorasi bagaimana asosiasi polymorphism dapat diimplementasikan di Ruby on Rails dan Laravel.
Apa itu polymorph?
Asosiasi polymorphism memungkinkan suatu model menjadi milik lebih dari satu model lain, dalam satu asosiasi. Artinya beberapa model dapat berbagi satu asosiasi, sehingga mengurangi duplikasi dan meningkatkan kemampuan pemeliharaan kode. Asosiasi polymorphism sangat berguna ketika berhadapan dengan skenario di mana berbagai jenis model perlu dihubungkan ke model yang umum.
Menerapkan Asosiasi polymorphism di Ruby on Rails
Di Ruby on Rails, penerapan asosiasi polymorphism sangatlah mudah. Mari kita pertimbangkan skenario ketika kita memiliki model Komentar yang dapat dikaitkan dengan model Postingan atau Video.
Untuk membangun asosiasi polymorphism, kita perlu membuat migrasi dan model yang diperlukan.
Pertama, kita membuat migrasi untuk menambahkan atribut commentable_id dan commentable_type ke tabel komentar:
rails generate migration AddCommentableToComments commentable_id:integer commentable_type:string
Selanjutnya, kita mendefinisikan model dan mengatur asosiasinya:
class Comment < ApplicationRecord
belongs_to :commentable, polymorphic: true
end
class Post < ApplicationRecord
has_many :comments, as: :commentable
end
class Video < ApplicationRecord
has_many :comments, as: :commentable
end
Dalam contoh ini, model Komentar termasuk dalam asosiasi polimorfik bernama commentable, dan model Posting dan Video memiliki asosiasi has_many dengan komentar yang menggunakan opsi :as.
Dengan pengaturan ini, kami sekarang dapat membuat komentar untuk postingan dan video:
post = Post.create(title: "My first post")
video = Video.create(title: "My first video")
post.comments.create(content: "Great post!")
video.comments.create(content: "Awesome video!")
Menerapkan Asosiasi Polimorfik di Laravel
Di Laravel, mengimplementasikan relasi database polimorfik juga mudah. Untuk mendemonstrasikannya, kita akan menggunakan contoh serupa di mana kita memiliki model Komentar yang dapat dikaitkan dengan model Postingan atau Video.
Pertama, kita perlu membuat migrasi untuk menambahkan atribut commentable_id dan commentable_type ke tabel komentar:
php artisan make:migration add_commentable_to_comments --table=comments
Kemudian, di file migrasi yang dihasilkan, tambahkan kolom yang diperlukan:
$table->unsignedBigInteger('commentable_id');
$table->string('commentable_type');
Selanjutnya, kita mendefinisikan model dan hubungannya:
class Comment extends Model
{
public function commentable()
{
return $this->morphTo();
}
}
class Post extends Model
{
public function comments()
{
return $this->morphMany(Comment::class, 'commentable');
}
}
class Video extends Model
{
public function comments()
{
return $this->morphMany(Comment::class, 'commentable');
}
}
Dalam contoh Laravel ini, model Comment menggunakan metode morphTo untuk mendefinisikan asosiasi polimorfik, dan model Post dan Video mendefinisikan asosiasi morphMany dengan Comment.
Terakhir, kami dapat membuat komentar untuk postingan dan video:
$post = Post::create(['title' => 'My first post']);
$video = Video::create(['title' => 'My first video']);
$post->comments()->create(['content' => 'Great post!']);
$video->comments()->create(['content' => 'Awesome video!']);
Kesimpulan
Asosiasi polimorfik adalah teknik ampuh yang memungkinkan hubungan antar model fleksibel dan efisien. Baik Anda membuat aplikasi Ruby on Rails atau Laravel, mengimplementasikan asosiasi polimorfik relatif mudah. Dengan memanfaatkan asosiasi polimorfik, Anda dapat meningkatkan pemeliharaan kode dan mengurangi duplikasi dalam aplikasi web Anda.