【发布时间】:2015-06-06 16:34:17
【问题描述】:
我有两个实体:一个帐户可以管理多个客户。
帐户
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
}
现在我想在我的 Twig 模板中选择所有帐户并打印客户数据。所以我使用以下查询:
$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 个查询。这太过分了。如何在一个查询中结合使用,以便将客户数据与帐户数据一起返回?
【问题讨论】:
-
尝试 $qb->getResult(Doctrine\ORM\Query::HYDRATE_ARRAY);,这可能会防止意外延迟加载(似乎有一些延迟加载正在进行)
-
当使用 HYDRATE_ARRAY 时,我只得到一个帐户数组。不包括客户。我需要如何调整我的查询?
-
你有一个完整的例子here。包括实体、存储库、FormType、Twig。
标签: php symfony doctrine-orm dql