doubu5154 2015-05-07 09:36
浏览 17
已采纳

Doctrine2:延迟加载失败,我必须重新初始化该类

I have three entities wallpost, albums and photos.

  1. wallpost has many to one relationship with albums.
  2. album has one to many relationship with photos.

When I post photos on my wall, the data goes into all three tables. One record in wallpost, one in album and multiple in photos.

Now when I fetch data using

$wall_post_obj->getAlbum()->getId()

It shows id but when I try to fetch any other info such as

$wall_post_obj->getAlbum()->getName()

It returns NULL.

This happens only when I delete one photo from album.

To get it work I have to re-initialize it using find query. like this: $em->find('\Entities\album',$id);


Extra information:

The $wall_post_obj comes from following query:

        $qb_1 = $em->createQueryBuilder();
        $q_1 = $qb_1->select('wp, fromUsr.id, 
                              fromUsr.professional_image, 
                              fromUsr.gender, 
                              fromUsr.firstname, 
                              fromUsr.lastname')
        ->from( '\Entities\wall_post', 'wp' )
        ->LeftJoin( 'wp.wall_postsFrom_user', 'fromUsr' )
        ->where( 'wp.id IN (:selected_wp_ids_r)' )
        ->setParameter( 'selected_wp_ids_r', $selected_wp_ids_r )
        ->orderBy( 'wp.last_activity_datetime', 'DESC' );

        // wallpost Comments join
        $q_1->addSelect( 'wall_comments, comment_user' );
        $q_1->LeftJoin( 'wp.wall_postsComment', 'wall_comments' );
        $q_1->LeftJoin( 'wall_comments.commentsIlook_user', 'comment_user' );

        // wallpost Likes join
        $q_1->addSelect( 'likes' );
        $q_1->LeftJoin( 'wp.wall_postsLikes', 'likes' );
        $q_1->LeftJoin( 'likes.likesLiked_by', 'likedByUser' );

        $q_1 = $q_1->getQuery()->getResult ();
  • 写回答

1条回答 默认 最新

  • doujiyun0041 2015-05-20 09:03
    关注

    The code was called in loop like below:

    foreach( ...  )
    {
         $wall_post_obj->getAlbum()
    }
    

    But accidentally $em->clear() was placed at the end of the loop.

    $em->clear() clears the data from your current object. so $em->refresh() will not work.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 mmocr的训练错误,结果全为0
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀