Doctrine естественно не поддерживает это, поскольку - с точки зрения отображения базы данных - не имеет смысла загружать не связанные объекты всякий раз, когда выбирается один столбец из таблицы a. Это также может оказать серьезное влияние на производительность.
Исходя из того, что это звучит, вы должны либо рассматривать A и B по отдельности, либо найти другое решение для внесения изменений в A и B одновременно, например, предоставляя какой-либо Фасад или услугу, управляющую хранилищами обеих сущностей. Если вам это абсолютно необходимо, один из возможных вариантов: добавить еще один уровень абстракции, предоставив класс, содержащий как один объект EntityA, так и все объекты EntityB
class EntityAWithBs
{
private $a;
private $bs;
public function __construct(EntityA $a, array $allBs)
{
$this->a = $a;
$this->bs = $allBs;
}
public function getEntityA(): EntityA
{
return $this->a;
}
public function getAllBs(): array
{
return $this->bs;
}
}
Затем вы можете создать класс, например, собственный репозиторий или добавить следующий метод в ваш EntityA-репозиторий:
public function getAWithAllBs($id): EntityAWithBs
{
$a = $this->entityManager->getRepository('EntityA')->find($id);
$bs = $this->entityManager->getRepository('EntityB')->findAll();
return new EntityAWithBs($a, $bs);
}
Всякий раз, когда вам нужен объект A со всеми объектами B одновременно, вы можете просто вызвать метод репозитория. Вы также можете расширить этот пример, чтобы иметь службу, которая выполняет действия над вновь созданным EntityAWithBs
, такие как изменение данных и их сохранение.
Пожалуйста, имейте в виду, что это все еще имеет некоторые изначально отмеченные недостатки, такие как возможные проблемы с производительностью, например, связанные с использованием памяти. Без какого-либо знания о том, что вы пытаетесь достичь с помощью этого отношения, это лучшее, что я могу придумать.