Не удается получить сущность Аватара пользователя, чтобы удалить ее в Symfony2

У меня есть сущность «Пользователь» и сущность «Аватар» с отношением «один к одному»:

//MyBundle/Entity/User.php

/**
* @ORM\OneToOne(targetEntity="Participso\UserBundle\Entity\Avatar", cascade={"remove", "persist"})
*/
protected $avatar;

И если у пользователя уже есть Аватар, я хочу удалить предыдущий, используя это:

//MyBundle/Controller/UserController.php

if ($avatarForm->isValid()) {
$em = $this->getDoctrine()->getManager();

if($currentUser->getAvatar()){
$em->remove($currentUser->getAvatar());
}

$currentUser->setAvatar($avatar);
$em->persist($currentUser); //"cascade=persist" from User
$em->flush();
}

И это:

//MyBundle/Entity/Avatar.php

/**
* @ORM\PostRemove()
*/
public function removeUpload()
{
$file = __DIR__.'/../../../../web/uploads/avatar/' . $this->fileName;
unlink($file);
}

Но, когда я делаю var_dump($currentUser->getAvatar())
Я получаю пустое имя файла, даже если имя файла существует в базе данных:

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

И когда я делаю var_dump($currentUser->getAvatar()->getFileName)Я получаю имя файла !! (а не NULL, как видно ранее) …

У кого-нибудь есть идея?

2

Решение

Попробуй это:

if($currentUser->getAvatar()){
$currentUser->removeUpload();
}
1

Другие решения

Спасибо за ваши ответы!

На самом деле это из-за «ленивой нагрузки» доктрины:

Если я сделаю :

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

выход :

object(Proxies\__CG__\Participso\UserBundle\Entity\Avatar)[355]
private 'id' (Participso\UserBundle\Entity\Avatar) => int 20
private 'fileName' (Participso\UserBundle\Entity\Avatar) => null

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

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

выход :

object(Proxies\__CG__\Participso\UserBundle\Entity\Avatar)[355]
private 'id' (Participso\UserBundle\Entity\Avatar) => int 20
private 'fileName' (Participso\UserBundle\Entity\Avatar) => string 'd4e5eadd3757498a22b14ad1f81869c2baf459d3.png'

Это довольно раздражает … Я создам новый пост, чтобы исправить это.

РЕДАКТИРОВАТЬ : Новый пост Вот, и это решено:

Чтобы избежать ленивой загрузки из доктрины, просто добавьте fetch="EAGER" в вашей родительской организации:

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

По вопросам рекламы [email protected]