@ManyToOne без обратного — свойство не отображается в поиске

#typescript #typeorm

Вопрос:

Я хочу иметь @ManyToOne отношения без обратного и определить их следующим образом:

 @ManyToOne(() => TrackedItem)
@JoinColumn({ name: "tracked_item_id" })
public trackedItem!: TrackedItem;
 

Я также пытался:

 @ManyToOne(() => TrackedItem, (ti) => ti.id)
@JoinColumn({ name: "tracked_item_id" })
public trackedItem!: TrackedItem;
 

Но когда я спрашиваю с:

 console.log(await con.manager.find(Track));
 

Я просто не возвращаю trackedItem собственность.

 Track {
  id: 4,
  timestamp: 1627509600000,
}
 

Я сохраняю данные следующим образом:

 const trackedItem = (await con.manager.find(TrackedItem))[0];

const beforePeriod = Track.from({
  timestamp: moment().subtract(1, "day").startOf("day").unix() * 1000,
  trackedItem,
});
 

В то время Track::from как это:

 public static from(from: {
  id?: number;
  timestamp: number;
  trackedItem: TrackedItem;
}): Track {
  const track = new Track();

  if (from.id) track.id = from.id;
  track.timestamp = from.timestamp;
  track.trackedItem = from.trackedItem;

  return track;
}
 

Возможно, стоит отметить, что я запускаю это внутри модульного теста, используя базу данных SQLite в памяти. На «производстве» (против постоянной базы данных MYSQL) это, кажется, присутствует, но просто trackedItem: undefined, .

Ответ №1:

Ответ довольно прост и содержится в документации по любому из отношений (к сожалению, ни одно из них не соответствовало моему варианту использования, поэтому я его не искал). Я здесь предоставляю ссылку для ManyToMany отношений

Чтобы загрузить пользователя с фотографиями внутри, вы должны указать отношение в FindOptions

Или, говоря более конкретно:

 const users = await userRepository.find({ relations: ["photos"] });