我有一个用户实体和一个具有一对一关系的头像实体:
//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())
,即使文件名存在于数据库中,我也会得到一个空的FileName:
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)...
有人有主意吗?
多谢您的回覆!
实际上,这是由于学说的“懒惰加载”:
如果我做 :
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")
*/
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句