Doctrine merupakan PHP library yang digunakan oleh Symfony untuk bekerja dengan database, Doctrine memberikan beberapa event untuk melakukan update pada entitiy selama aplikasi sedang berjalan. Event-event ini dipicu oleh setiap kejadian dalam siklus hidup aplikasi misal: "update property createdAt saat akan menyimpan data ke database atau update property updateAt saat data di entity diupdate".
Doctrine akan memicu berbagai event sesaat sebelum atau setelah melakukan tindakan pada entity, misalnya: prePersist/postPersist, preUpdate/postUpdate dan juga pada tugas umum lainnya seperti: Q111.
Ada beberapa cara untuk me "listen" event-event Doctrine tersebut:
- Lifecycle callbacks, merupakan kumpulan method pada class entity dan mereka akan dipanggil saat events dipicu/dipanggil.
- Lifecycle listeners and subscribers, merupakan classes dengan callback methods untuk satu atau lebih event dan mereka dipanggil oleh semua entity.
- Entity listeners, serupa dengan lifecycle listeners, akan tetapi mereka hanya dipanggil untuk entity dari spesifik class.
Berikut gambaran dari kelebihan masing cara untuk me "listen" event-event Doctrine tersebut:
- Lifecycle Callback memiliki performa yang lebih baik karena mereka hanya bekerja untuk sebuah class entity, tapi kita tidak bisa mereuse logic yang digunakan pada entity yang lain dan mereka tidak memiliki akses pada Symfony Services.
- Lifecycle listeners dan subscribers dapat menggunakan ulang logic antara beberapa entity yang berbedadan dapat melakukan akses pada Symfony Service tapi tentunya mereka lebih berat karena dipanggil untuk semua entity.
- Entity listeners memiliki kemiripan dengan lifecycle listeners tapi memiliki performa yang lebih baik karena hanya jalan pada sebuah entity.
"Pada catatan ini saya hanya membahas dasar-dasar Doctrine Lifecycle Callback yang berada didalam sebuah aplikasi Symfony. Bila ingin lebih lengkap silahkan baca manual milik Doctrine."
Pada contoh ini saya akan menggunakan contoh menambahkan post_created_at pada Post.php, field ini akan otomatis terisi tanggal pembuatan dari post, berikut ini adalah langkah-langkah yang saya lakukan.
1. Setup Annotation di Class Post.php
Pertama-tama tambahkan annotation @ORM\HasLifecycleCallbacks() pada clas Post.php sebagai berikut.
2. Setup PrePersist() Callback
Kedua buat fungsi ini sebagai callback yang akan mengisi $post_created_at setiap membuat record baru ditable posts.
3. Hapus Manual Set Datetime di Controller
Ketiga, bila sebelumnya kita set berbagai macam date secara manual di Controller maka sekarang kita sudah tidak memerlukannya lagi.
4. Hasil
Bila sekarang kita buat data baru maka akan ada datetime di post_created_at.
Comments
Post a Comment