避免延迟加载Doctrine Symfony2

Leo*_*out 12 php doctrine lazy-loading symfony doctrine-orm

我的项目中有两个实体:User和Avatar.

用户拥有具有OneToOne关系的头像.

头像是具有文件对象和fileName的实体.它使用@ORM\HasLifecycleCallbacks来保存文件或删除它,如Symfony2文档中所述.

在我的控制器中,我想从当前用户中删除Avatar实体(我使用$currentUser = $this->get('security.context')->getToken()->getUser()),但我无法获得头像$currentUser->getAvatar():

var_dump($currentUser->getAvatar());exit;
Run Code Online (Sandbox Code Playgroud)

输出:

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
Run Code Online (Sandbox Code Playgroud)

但如果我这样做

$whatever = $currentUser->getAvatar()->getFileName();
var_dump($currentUser->getAvatar());exit;
Run Code Online (Sandbox Code Playgroud)

输出:

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'
Run Code Online (Sandbox Code Playgroud)

这很烦人......有人有线索可以避免这种情况吗?

Ano*_*ous 22

Doctrine文档中所述,您只需要指定提取行为即可.

/**
 * @OneToOne(targetEntity="User", fetch="EAGER")
 * @JoinColumn(name="user_id", referencedColumnName="id")
 */
Run Code Online (Sandbox Code Playgroud)

请参阅YAML的文档或其他配置示例.

  • 对于ref:我必须在``@ OneToOne```注释中添加````fetch```参数,以便在Symfony 2.8 Doctrine/ORM 2.5下工作 (3认同)