사용자 엔터티와 일대일 관계가있는 아바타 엔터티가 있습니다.
//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"
부모 Entity를 추가 하십시오.
/**
* @OneToOne(targetEntity="User")
* @JoinColumn(name="user_id", referencedColumnName="id", fetch="EAGER")
*/
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다