首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如果使用查询构建器获取数据,则postLoad不起作用

如果使用查询构建器获取数据,则postLoad不起作用
EN

Stack Overflow用户
提问于 2018-12-07 23:16:54
回答 1查看 387关注 0票数 1

我已经创建了事件侦听器

代码语言:javascript
运行
复制
class ProcessPostLoadListener
{
    public function postLoad(LifecycleEventArgs $args)
    {
        $em = $args->getEntityManager();
        $entity = $args->getEntity();
        if ($entity instanceof Process) {
              .
              .
              .
        }

    }
}

当我使用getRepository(Process::class)->find($id)获取数据时,将调用postLoad方法,并且我可以修改数据。

但是当使用查询构建器获取数据时

代码语言:javascript
运行
复制
$qb = $this->createQueryBuilder('p')
    ->select('PARTIAL p.{id,answersInRelatedQuestionnaires}')
    ->where('p.id = :processId')
    ->setParameter('processId', $processId);

未调用postLoad。我能做什么?是否有其他事件可供监听?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-12-08 18:36:45

引用documentation教义

在将实体从数据库加载到当前EntityManager中或对其应用刷新操作后,实体会发生

PostLoad事件

这意味着只有在实体对象被消隐时才会调度PostLoad事件,而且只有在消隐模式被设置为HYDRATE_OBJECT时才会发生这种情况。由于您使用的是HYDRATION_ARRAY,因此会返回一个关联数组,并且没有实体对象会被合并,这就是PostLoad事件不会发生的原因。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53672283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档