Я ищу лучший способ LAZY загрузить отношение к объекту из API.
Сценарий У меня есть приложение Symfony 4, которое поддерживается базой данных с использованием Doctrine, и в этой базе данных у меня есть несколько таблиц, включая Customer.
У меня также есть доступ к API с различными данными, относящимися к этому клиенту, такими как счета, счета, продукты, счета.
Мне нужно отобразить список данных о клиенте с разбивкой на страницы, который содержит значения от Заказчика и из результатов запросов API.
Мое решение до сих пор состояло в том, чтобы создать свойство сущности Customer для каждой связанной сущности в API, а затем у меня есть класс EntityLoadListener, который прослушивает событие жизненного цикла события PostLoad. Когда это срабатывает, он проверяет, является ли объект клиентом, и если да, то загружает результаты из API и обновляет отношение:
// customer is the customer entity
// the api call here returns a collection full of invoice entities
$invoices = $this->api->getInvoicesForAccount($customer->getAccountCode());
// get the name of the property to set on the entity
$propertyName = 'apiInvoices';
// set the property on the entity
$relationProp = $em->getClassMetadata($class)
->reflClass->getProperty($propertyName);
$relationProp->setAccessible(true);
$relationProp->setValue($entity, $invoices);
Это работает, но при загрузке большого количества клиентов это происходит медленно. И если мне не нужно отображать данные счета, я бы не стал загружать данные из API. Есть ли лучший способ реализовать это, когда я буду запрашивать API только при вызове геттера клиента для getApiInvoices (т.е. отложенной загрузки)?