У меня есть 2 класса, и я хочу использовать нетерпеливую загрузку:
/**
* @MongoDB\Document(collection="wallet")
*/
class Wallet
{
/**
* @MongoDB\ReferenceMany(targetDocument="WalletEntry", mappedBy="wallet")
*/
protected $entries;
}
/**
* @MongoDB\Document(collection="wallet_entry")
*/
class WalletEntry
{
/**
* @MongoDB\ReferenceOne(targetDocument="Wallet", storeAs="id")
*/
protected $wallet;
}
- Этот код использует ленивую загрузку и генерирует n + 1 запросов:
$wallets = $doctrine->getRepository('App:Wallet')->findAll();
foreach ($wallets as $wallet) {
foreach ($wallet->entries as $entry) {
// ...
}
}
- Этот код генерирует ошибку
Field "entries" is not the owning side of a reference relationship in class "App\Document\Wallet"
:
$wallets = $doctrine->createQueryBuilder('App:Wallet')
->field('entries')->prime(true)
->getQuery()
->execute();
Как я могу загрузить кошельки вместе с их записями, используя готовую загрузку и только 2 запроса? Я не храню никаких ссылок в документах Wallet, потому что количество соответствующих документов WalletEntry может быть очень большим.