【问题标题】:Symfony serialization with groups and relations带有组和关系的 Symfony 序列化
【发布时间】:2021-01-05 11:29:22
【问题描述】:

我正在使用 Symfony 的序列化程序来返回 JSON 响应。我使用组仅返回相关信息:

return new JsonResponse($this->serializer->serialize($userRepository->getActiveUser(), 'json', ['groups' => ['contact-information']]));

我的User 类有其他我对上述请求不感兴趣的关系,例如paymentProfile。此属性具有不同的组:

class User {
...

    /**
     * @ORM\ManyToOne(targetEntity=PaymentProfile::class)
     * @Groups({"payment-information"})
     */    
    protected $paymentProfile;  

}

返回的 JSON 不包括 Users 的 paymentProfile 属性(如预期的那样),但查看 Symfony Profiler,我发现该请求需要 100 次单独的 paymentProfile 查询(每个返回的用户一个):

存储库:

    public function getActiveUsers()
    {
        return $this->createQueryBuilder('u')
            ->andWhere('u.active= :active')
            ->setParameter('active', true)
            ->getQuery()->getResult()
        ;
    }

序列化组不会阻止不必要的数据获取吗?如果是,我做错了什么?如果没有,我怎样才能摆脱额外的查询?

编辑:

Symfony\Component\Serializer\Normalizer\AbstractNormalizer::IGNORED_ATTRIBUTES 也没有解决问题。

【问题讨论】:

标签: php symfony doctrine


【解决方案1】:

这就是为什么:

单表继承有一个一般的性能考虑:如果目标实体是多对一或一对一 关联是一个 STI 实体,出于性能原因,它是可取的 是继承层次结构中的叶实体(即没有子类)。 否则 Doctrine 不能创建该实体的代理实例,并且总是会急切地加载该实体。 (https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/inheritance-mapping.html#performance-impact)

H/Thttps://stackoverflow.com/a/25754165/1550361

【讨论】:

    猜你喜欢
    • 2016-10-11
    • 1970-01-01
    • 2018-07-12
    • 2017-02-25
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多