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}。更新您的问题,以便我可以根据它更新我的答案。是否有方法检查是否使用了正确的获取模式?我尝试启用它,但没有区别。