Proksi
Doctrine proxy hanyalah pembungkus yang memperluas kelas entitas untuk menyediakan Lazy Loading untuknya.
Secara default, saat Anda meminta Manajer Entitas untuk entitas yang terkait dengan entitas lain, entitas terkait tidak akan dimuat dari database, tetapi dibungkus ke dalam objek proxy. Ketika aplikasi Anda kemudian meminta properti atau memanggil metode entitas yang di-proxy ini, Doctrine akan memuat entitas dari database (kecuali jika Anda meminta ID, yang selalu dikenal oleh proxy).
Ini terjadi sepenuhnya transparan untuk aplikasi Anda karena fakta bahwa proxy memperluas kelas entitas Anda.
Doctrine secara default akan menghidrasi asosiasi sebagai proxy pemuatan lambat jika Anda tidak JOIN
memasukkannya dalam kueri atau menyetel mode pengambilan ke EAGER
.
Sekarang saya harus menambahkan ini karena saya tidak memiliki reputasi yang cukup untuk berkomentar di mana-mana:
Sayangnya, jawaban Crozin mengandung informasi yang salah.
Jika Anda menjalankan kueri DQL seperti
SELECT u.id, u.username FROM Entity\User u WHERE u.id = :id
Anda tidak akan mendapatkan objek entitas (yang diproksikan), tetapi array asosiatif. Jadi, tidak mungkin untuk memuat properti tambahan secara lambat.
Dengan pemikiran ini, seseorang sampai pada kesimpulan bahwa contoh use case juga tidak akan berfungsi. DQL harus diubah menjadi seperti ini untuk mengakses $article
sebagai objek:
SELECT a FROM Entity\Article a ORDER BY a.createdAt DESC LIMIT 25
Dan properti yang dikembalikan oleh getContent()
harus berupa asosiasi agar tidak memuat properti konten dari semua 25 entitas.
Objek Parsial
Jika Anda ingin memuat sebagian properti entitas yang bukan merupakan asosiasi, Anda harus memberi tahu Doktrin ini secara eksplisit:
SELECT partial u.{id, username} FROM Entity\User u WHERE u.id = :id
Ini memberi Anda objek entitas yang dimuat sebagian.
Namun berhati-hatilah karena objek parsial bukanlah proxy! Lazy Loading tidak berlaku untuk mereka. Oleh karena itu, menggunakan objek parsial umumnya berbahaya dan harus dihindari. Baca lebih lanjut: Objek Parsial - Doktrin 2 ORM 2 dokumentasi