【发布时间】: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 也没有解决问题。
【问题讨论】:
-
你试过 fetch="EXTRA_LAZY" 吗? doctrine-project.org/projects/doctrine-orm/en/2.7/tutorials/…
-
@IwanWijaya - 是的,这也不行