Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony2-条令一家公司选择发行_Php_Symfony_Doctrine Orm_Dql - Fatal编程技术网

Php Symfony2-条令一家公司选择发行

Php Symfony2-条令一家公司选择发行,php,symfony,doctrine-orm,dql,Php,Symfony,Doctrine Orm,Dql,我有两个实体:一个帐户可以管理多个客户 账户 class Account { /** * @ORM\OneToMany(targetEntity="AppBundle\Entity\Account", mappedBy="account", cascade={"persist"}) */ protected $customers; } 客户 class Customer { /** * @ORM\ManyToOne(targetEntity

我有两个实体:一个帐户可以管理多个客户

账户

class Account {
    /**
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\Account", mappedBy="account", cascade={"persist"})
     */
    protected $customers;
}
客户

class Customer {
    /**
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Account", inversedBy="customers", cascade={"persist"})
     * @ORM\JoinColumn(name="accountid", referencedColumnName="id", nullable=true)
     */
    protected $account;

    # + other ManyToMany-Relations
}
现在,我想选择所有帐户并在我的细枝模板中打印客户数据。因此,我使用以下查询:

$qb = $this->getEntityManager()->createQueryBuilder();
$customers = $qb->select('acc')
    ->from('AppBundle:Account', 'acc')
    ->leftJoin('AppBundle:Customer', 'customer', 'WITH', 'customer MEMBER OF acc.customers')
    ->where('customer.active = true')
    ->orderBy('acc.id', 'ASC')
    ->getQuery()
    ->getResult();

这工作得非常好,但是当访问客户数据时,会为每个客户执行另一个查询。这意味着我在打印100个客户时执行了101个查询。那太过分了。如何将其组合到一个查询中,以便将客户数据与帐户数据一起返回?

因此,这是Doctrine2的功能。如果您想访问它,所有关系都将被延迟加载


作为解决方案,您可以先执行查询

在select方法中添加客户可以使执行的查询最小化

$customers = $qb->select('acc, customer')
    ->from('AppBundle:Account', 'acc')
    ->leftJoin('AppBundle:Customer', 'customer', 'WITH', 'customer MEMBER OF acc.customers')
    ....
;

尝试$qb->getResult(条令\ORM\Query::水合物数组);,这可能会防止在使用Hydrou数组时意外的延迟加载(似乎有一些延迟加载正在进行),然后我只得到一个帐户数组。不包括任何客户。我需要如何调整我的查询?你有一个完整的例子。包括实体、存储库、表单类型、细枝。这将导致分别返回帐户和客户(数组(20){{帐户}数组(4){客户}数组(20){客户}数组(4){帐户}…}-我需要帐户数组中的客户。否则我无法在我的细枝模板中迭代结果。您确认查询已减少吗?您的细枝如何访问结果?在我的细枝模板中,我将在accounts.Customers%}中为客户设置一个{%for customer}。更新您的问题,以便我可以根据它更新我的答案。是否有方法检查是否使用了正确的获取模式?我尝试启用它,但没有区别。