Избегайте ленивой загрузки Doctrine Symfony2

У меня есть два объекта в моем проекте: Пользователь и Аватар.

Пользователь владеет Avatar с отношением OneToOne.

Аватар - это объект с файловым объектом и fileName. Он использует @ORM\HasLifecycleCallbacks для сохранения файла или его удаления, как описано в документации Symfony2.

В моем контроллере я хочу удалить объект Avatar от текущего пользователя (я использую $currentUser = $this->get('security.context')->getToken()->getUser()), но я не могу получить аватар с $currentUser->getAvatar():

var_dump($currentUser->getAvatar());exit;

Выход:

object(Proxies\__CG__\Participso\UserBundle\Entity\Avatar)[355]
    public '__initializer__' =>
object(Closure)[348]
    public '__cloner__' =>
object(Closure)[349]
    public '__isInitialized__' => boolean false
    private 'id' (Participso\UserBundle\Entity\Avatar) => int 20
    public 'file' => null
    private 'fileName' (Participso\UserBundle\Entity\Avatar) => null

Но если я делаю

$whatever = $currentUser->getAvatar()->getFileName();
var_dump($currentUser->getAvatar());exit;

Выход:

object(Proxies\__CG__\Participso\UserBundle\Entity\Avatar)[355]
    public '__initializer__' =>
object(Closure)[348]
    public '__cloner__' =>
object(Closure)[349]
    public '__isInitialized__' => boolean false
    private 'id' (Participso\UserBundle\Entity\Avatar) => int 20
    public 'file' => null
    private 'fileName' (Participso\UserBundle\Entity\Avatar) => string 'd4e5eadd3757498a22b14ad1f81869c2baf459d3.png'

Это очень раздражает... Есть ли у кого-нибудь ключ, чтобы избежать этого?

Ответ 1

Как описано в Doctrine docs, вам просто нужно указать, чтобы поведение выборки было нетерпеливым.

/**
 * @OneToOne(targetEntity="User", fetch="EAGER")
 * @JoinColumn(name="user_id", referencedColumnName="id")
 */

См. документацию по YAML или другим примерам конфигурации.