databas - Hur man väljer endast ett/flera fält från en sammanfogad enhet i Typeorm
enligt TypeOrm-dokumentationen: https://github.com/typeorm/typeorm/blob/master/docs/select-query-builder.md#joining-relations
Vi kan fråga den anslutna enhetens fält som kommer att fylla alla dess fält i svaret. Jag är inte säker på hur man begränsar till endast några utvalda fält (enkelt/flera), jag försökte lägga till 'select([])' men det fungerar inte i den genererade SQL-frågan, jag kan se att den frågar efter alla fälten.
kod :
import {Entity, PrimaryGeneratedColumn, Column, OneToMany} from "typeorm";
import {Photo} from "./Photo";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@OneToMany(type => Photo, photo => photo.user)
photos: Photo[];
}
import {Entity, PrimaryGeneratedColumn, Column, ManyToOne} from "typeorm";
import {User} from "./User";
@Entity()
export class Photo {
@PrimaryGeneratedColumn()
id: number;
@Column()
url: string;
@Column()
alt: string;
@ManyToOne(type => User, user => user.photos)
user: User;
}
och på koden:
const user = await createQueryBuilder("user")
.leftJoinAndSelect("user.photos", "photo")
.where("user.name = :name", { name: "Timber" })
.getOne();
Koden ovan ger utdata som -
{
id: 1,
name: "Timber",
photos: [{
id: 1,
url: "me-with-chakram.jpg",
alt: "Me With Chakram"
}, {
id: 2,
url: "me-with-trees.jpg",
alt: "Me With Trees"
}]
}
Finns det ett sätt jag kan fråga endast 'url' och 'alt' så att utdata ser ut ungefär så här -
{
id: 1,
name: "Timber",
photos: [{
url: "me-with-chakram.jpg",
alt: "Me With Chakram"
}, {
url: "me-with-trees.jpg",
alt: "Me With Trees"
}]
}
Svar #1
const user = await createQueryBuilder("user")
.leftJoinAndSelect("user.photos", "photo")
.select(['user', 'photo.url', 'photo.alt'])
.where("user.name = :name", { name: "Timber" })
.getOne();
eller
const user = await createQueryBuilder("user")
.leftJoinAndSelect("user.photos", "photo")
.addSelect(['photo.url', 'photo.alt'])
.where("user.name = :name", { name: "Timber" })
.getOne();
(inte säker på den andra)
