typescript - Kartlägga resultat från SELECT direkt till en fördefinierad klass med pg-promise
Anta att jag har en klass
class Dog {
id: number
legs: number
}
och ett bord med samma egenskaper. Jag använder pg-promise för att fråga från databasen på följande sätt:
getDogs(): Promise<Dog[]> {
return obj.any('SELECT id, legs FROM Dog')
}
och jag vill kalla denna funktion så här:
const dogs: Dog[] = await Database.getDogs()
Det jag vill är att resultatet automatiskt ska mappas till en array av hundar. Just nu måste jag iterera över resultatet och manuellt mappa varje resultat och sedan lägga till det i arrayen, och jag vill inte göra detta för varje objekt jag frågar från databasen.
Svar #1
Använd metoden Database.map<T=any> för det:
getDogs(): Promise<Dog[]> {
return obj.map<Dog>('SELECT id, legs FROM Dog', [], a => new Dog(a));
}
Din klass skulle vara:
class Dog {
constructor(row: any) {
this.id = row.id;
this.legs = row.legs;
}
id: number
legs: number
}
Andra användbara länkar:
- Metod Database.each<T=any>
- Modulscheman
