У меня есть два объекта: одна учетная запись может управлять несколькими клиентами.Symfony2 - Doctrine OneToMany Select-Issue
Счет
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();
Это отлично работает нормально, но при обращении к клиенту-данные другого запрос запускается на выполнение для каждого клиента. Это означает, что у меня есть 101 выполненный запрос при печати 100 клиентов. Это слишком много. Как я могу объединить это в одном запросе, чтобы данные клиента возвращались с данными учетной записи?
попробовать $ qb-> GetResult (Doctrine \ ORM \ Query :: HYDRATE_ARRAY) ;, это может предотвратить случайную отложенную загрузку (кажется, есть некоторая ленивая загрузка происходит) – wonde
При использовании HYDRATE_ARRAY тогда я только получаю массив учетной записи. Клиентов нет. Как мне настроить свой запрос? – chrisp
У вас есть полный пример [здесь] (http://www.inanzzz.com/index.php/post/djrc/full-webform-style-crud-example-with-an-embedded-associated-entity-in- Symfony). Включает Entity, Repository, FormType, Twig. – BentCoder