Symfony Doctrine Self Referencing Relationship

Self referencing relationship adalah saat sebuah entity berelasi dengan entity yang sama, misal entity User dengan Entity User lagi, contoh kasus adalah hubungan User yang di-follow/mem-follow (ManyToMany) User lainnya, atau contoh kasus lainnya adalah seorang User merupakan atasan bagi banyak Users dan juga disaat yang sama merupakan bawahan dari seorang User lainnya (OneToMany).

Pada beberapa kasus hal ini bisa membuat bingung, supaya tidak bingung berulangkali mari kita buat sebuah catatan mengenai hal ini.

ManyToMany

Contoh kasus untuk ini adalah dengan bermodalkan entity User (dengan sebuah table `users` dan sebuah table `following` yang secara otomatis di-generate oleh Doctrine untuk membantu relationship) kita akan membuat fitur follower dan following. follower adalah adalah orang yang mengikuti dan following adalah orang yang diikuti.
  1. Si A following si B
  2. Berarti si A follower si B
Untuk mengimplementasikan hal ini maka kita perlu menambahkan property followers dan following pada entity User di User.php. Sementara properties tersebut akan terlihat seperti ini.

Seorang user bisa memili banyak followers dan following banyak users lainnya.
Penyesuaian pada constructor untuk handle saat User di instance dengen perintah new (artinya references masih kosong semua ).

Setup Relasi untuk Follower dan Following

Relasi dengan doctrine annotation

Set Getters untuk Follower dan Following

Getters dengan return collections

Generate Table Following dengan Migration

Generate migration file baru dengan mengecek perubahan dari User entitiy dengan perintah berikut:
./bin/console doctrine:migration:diff

Migrate file migration yang sebelumnya dihasilkan oleh proses diatas dengan perintah dibawah ini.

./bin/console doctrine:migration:migrate

Hasil dari proses diatas akan menghasilkan tabel sebagai berikut.

Tabel yang dihasilkan.
Hasil dari proses diatas mengeksekusi query sebagai berikut untuk membuat table following.


Query dari hasil migrate diatas.

Setup Button Follow dan UnFollow

Follow dan Unfollow buttons
Jika profil yang ditampilkan adalah bukan milik yang login maka tampilkan Follow/Unfollow, dan jika sudah difollow maka tampilkan unfollow dan sebaliknya jika belum difollow maka tampilkan button follow.

Setup Controller FollowingController

Import / use berbagai macam libraries yang diperlukan, saya sendiri menggunakan VSCode dan import libraries macam ini dihandle dengan baik oleh IDE yang saya gunakan.
Libraries/services yang di use.
Buat class dan buat properties private berupa variable private global yang diperlukan.


Variable properties yang diset private.
Setup constructor supaya Symfony dapat menginject berbagai macam service kedalam controller kita dari sana.

Selanjutnya buat methods dan routes nya untuk dapat melakukan follow dan unfollow.

Method dan Route untuk melakukan follow.

Method dan Route untuk melakukan unfollow.

Hasil Di Local Saya


ManyToOne dan OneToMany

Pada contoh kasus ini kita akan menggunakan istilah Upline dan Downline pada user, yang artinya setiap user akan memiliki user seorang boss/upline dan banyak bawahan/downline.
  1. Si A memiliki upline si B.
  2. Si C memiliki upline juga si B.
  3. Berarti si B memiliki downline yaitu si A dan C.
Bersambung untuk upline dan donwline...

Sumber

Comments

Popular posts from this blog

Numpang Kerja Remote dari Bandung Creative Hub

Numpang Kerja Remote dari Bandung Digital Valley

Cara Decompile berkas Dex dan Apk Android