Хотя я могу запрашивать даты, используя eventRepository.dates (eventId), они недоступны, когда я запрашиваю http://localhost:3000/events - Как я могу добиться этого, не запрашивая eventRepository.dates (eventId) отдельно?
Мы называем эту функцию «включением связанных моделей», и, к сожалению, она еще не реализована.Вы можете отслеживать прогресс здесь: https://github.com/strongloop/loopback-next/issues/1352
С другой стороны, я бы хотел, чтобы события POST и PATCH не публиковали и не фиксировали даты событий отдельно. Возможно ли это с помощью нескольких строк кода?
Если я правильно вас понял, вы бы хотели обновить оба экземпляра Event
и EventDate
с помощью одного вызова REST API.Мы не поддерживаем эту функциональность и, честно говоря, я не уверен, что когда-либо будем.
Это то, что мне нужно, чтобы поле даты было доступно в разделе / events прямо сейчас (некажется, что это правильный путь).
Ваши решения уязвимы к так называемой «проблеме выбора 1 + N» (см., например, Что такое «проблема выбора N + 1» в ORM(Объектно-реляционное отображение)? ).Если ваше событие имеет N дат, то вы делаете 1 + N запросов к базе данных.
Лучшее решение - использовать оператор LoopBack inq
:
const eventIds = events.map(e => e.id);
const dates = await this.datesRepository.find({where:{eventId:{inq: eventIds}}});
// copy "dates" entries to relevant "event" items
// by matching "dates[].eventId" against "events[].id"
Если количество запрошенных событий равноhigh, тогда вам нужно будет разбить массив eventIds
на более мелкие куски и несколько раз вызвать this.datesRepository.find
.
В любом случае, это суть того, что мы собираемся реализовать в LoopBack в ближайшем будущем.
Поскольку вы ищете решение, которое уже реализовано во фреймворке, фрагменты кода, которые вы опубликовали, в значительной степени такие.