Отображение нескольких сущностей из одного запроса пока не поддерживается, планируется для v4. Вы можете подписаться здесь: https://github.com/mikro-orm/mikro-orm/issues/440
В v3 вам нужно использовать 2 запроса для загрузки 2 сущностей, что для вашего варианта использования гораздо проще без участия QB.
return this.authorRepository.findOne({ key }, ['books']);
Или вы можете использовать qb.execute()
, чтобы получить необработанные результаты и отобразить их самостоятельно, но вам также придется вручную псевдоним всех полей, чтобы обойти дубликаты (Author.name
против Book.name
) , так как выполнение qb.select(['a.*', 'b.*'])
приведет к запросу select a.*, b.* ...
, и дублированные столбцы не будут правильно отображены.
https://mikro-orm.io/docs/query-builder/#mapping -raw-results-to-entity
Об элементе autoLoadEntities
, о котором никогда не слышали, рассмотрим, как он работает, но в общем, адаптер nest js не разработан мной, поэтому, если это что-то, связанное только с гнездом, было бы лучше спросить об их репозитории GH.
Или вы можете использовать обнаружение на основе папок (entitiesDirs
).
вот новый пример с 3 сущностями:
return this.authorRepository.findOne({
key,
books: { bookMetadata: localeKey } },
}, ['books.bookMetadata']);
Это даст 3 запроса, по одному для каждой таблицы БД, но первый будет автоматически присоединен книги и bookMetadata, чтобы иметь возможность фильтрации по ним. Условие будет распространено вниз во втором и третьем запросе.
Если вы не укажете параметр заполнения (['books.bookMetadata']
), то будет запущен только первый запрос, и в итоге книги не будут заполнены (но автору будет предложено условие объединения).