typescript - Typeorm find-spørring returnerer ikke ManyToOne-relasjonens id
Som tittelen sier:
Jeg har en business-user-tabell og en business-hours-tabell. business-hours har et ManyToOne-forhold til business-user.
Forholdet på siden av business-hours er definert som nedenfor.
@ManyToOne(() => BusinessUser, (businessUser) => businessUser.businessHours)
@JoinColumn()
businessUser: BusinessUser;
Typeorm-dokumentasjonen sier at dette skal opprette et felt som businessUserId i tabellen, noe det gjør. Siden dette også er en relasjon på primærnøkkelen, trenger jeg ikke å navngi eller referere det. Men når jeg gjør find eller findOne-forespørsel, blir businessUserId ikke returnert lenger. Når jeg sjekker databasen, er feltet og verdiene til stede som forventet, bare at de ikke returneres i find-forespørselen. Tidligere fungerte det fint, og jeg fikk relasjonstabell-ID for alle tabeller, men nå fungerer det ikke lenger. Lurer på om noen kan hjelpe meg med dette eller finne ut hva som har endret seg. Jeg har allerede prøvd løsningene til lignende spørsmål som er stilt her, ingenting hjalp.
Svar #1
Det finnes en "offisiell" løsning i den offisielle dokumentasjonen. Den forklarer "Hvordan bruke relasjons-ID uten å koble til relasjon".
For å oppsummere, du trenger bare å legge til en myRelationId (i ditt tilfelle, en businessUserId) kolonne til din enhet slik som dette (for eksempel):
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column({ nullable: true })
profileId: number; // <---------- You'll get only the id from here
@OneToOne(type => Profile)
@JoinColumn()
profile: Profile; // <----------- You don't want all the data
}
Hvis du gjør det slik, fjern åpenbart {relations : ["businessUser"]} fra forespørslene dine.
Svar #2
før du lagrer, bruk kaskader på den ene siden av mange-til-mange-relasjonen for å lagre i begge tabellene, når du importerer brukerrelasjonsalternativet og også businessUser er et array av BusinessUser
@ManyToOne(() => BusinessUser, (businessUser) => businessUser.businessHours ,{ cascade : true})
@JoinColumn()
businessUser: BusinessUser[];
const foundOne = await this.entity.findOne(id , {relations : ["businessUser"]})
const foundAll = await this.entity.findOne({relations : ["businessUser"]})
hvis du vil laste det automatisk, bruk eager
@ManyToOne(() => BusinessUser, (businessUser) => businessUser.businessHours ,{ cascade : true , eager : true})
@JoinColumn()
businessUser: BusinessUser[];
