Symfony 5 - Twig - 访问 entity.entityB.entityC.property 花费很多请求

问题描述

在我的一个页面上,我显示一个客户列表,其中包含他们的国家或公司名称等信息。

于是我进行了如下操作:

存储库:

    public function findAllAvailableCustomers()
    {
        return $this->createqueryBuilder('s')
            ->join('s.user','u')
            ->join('u.entreprise','e')
            ->leftJoin('s.subscription','ss')
            ->leftJoin('ss.plan','sp')
            ->addSelect('ss')
            ->where('e.willbedeleted = false')
            ->orderBy('s.createdAt','DESC')
            ->getQuery()
            ->getResult();
    }

树枝:

//...

<td>{{ customer.user.email }}</td>
<td>{{ customer.denomination }}</td>
<td>{{ customer.user.entreprise.nom }}</td> // generates 11 requests

//...

我不明白如何减少因显示客户的公司名称而导致的查询数量

我尝试在 fetch="EXTRA_LAZY"StripeCustomer.user 实体属性添加 User.entreprise,但没有。

我也尝试在请求中添加内容

->addSelect('u,e,ss') 但它会产生 600 多个请求

所以我不知道... :/

解决方法

您还应该在第一个查询中选择企业实体:

public function findAllAvailableCustomers()
{
    return $this->createQueryBuilder('s')
        ->join('s.user','u')
        ->join('u.entreprise','e')
        ->leftJoin('s.subscription','ss')
        ->leftJoin('ss.plan','sp')
        ->addSelect('e') // <--- HERE
        ->addSelect('ss')
        ->where('e.willBeDeleted = false')
        ->orderBy('s.createdAt','DESC')
        ->getQuery()
        ->getResult();
}