Как использовать Doctrine MongoDB ODM для быстрой загрузки в Symfony? - PullRequest
0 голосов
/ 24 марта 2019

У меня есть 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;
}
  1. Этот код использует ленивую загрузку и генерирует n + 1 запросов:
$wallets = $doctrine->getRepository('App:Wallet')->findAll();

foreach ($wallets as $wallet) {
    foreach ($wallet->entries as $entry) {
        // ...
    }
}
  1. Этот код генерирует ошибку 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 может быть очень большим.

...