Я пытаюсь добиться некоторого повышения эффективности, объединив несколько записей из нескольких таблиц в соответствии со статьей: Присоединение к связанным записям .В моей модели у меня есть трекер с одним Linkset, который, в свою очередь, имеет несколько ссылок.Теперь в моем контроллере я хочу просмотреть эти ссылки с помощью:
foreach ($tracker->getLinkset()->getLinks() as $link) etc..
Более того, код в моем репозитории Tracker выглядит следующим образом:
public function findWithLinks(Tracker $tracker)
{
$query = $this->createQueryBuilder('t')
->select('t, ls, l')
->innerJoin('t.linkset', 'ls')
->leftJoin('ls.links', 'l')
->where('t.id = :trackerId')
->setParameters(array(
'trackerId' => $tracker->getId()
));
return $query->getQuery()->getResult();
}
То, что я ожидал бы,в контроллере, когда я перебираю таблицу foreach, Symfony не выполняет никаких дополнительных вызовов к базе данных, потому что у меня есть Tracker с присоединенным набором ссылок и присоединенными ссылками.Тем не менее, два дополнительных запроса выполняются, чтобы получить Linkset и ссылки отдельно.Вот сопоставления связанных объектов:
Объект Linkset:
/**
* @var Link
*
* @ORM\ManyToMany(targetEntity="Link", mappedBy="linkset")
*/
private $links;
Объект Link
/**
* @var Linkset
*
* @ORM\ManyToMany(targetEntity="Linkset", inversedBy="link")
* @ORM\JoinTable(name="linkcombo",
* joinColumns={
* @ORM\JoinColumn(name="link_id", referencedColumnName="id", onDelete="CASCADE")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="linkset_id", referencedColumnName="id", onDelete="CASCADE")
* }
* )
*/
private $linkset;