[英]Return ONLY selected fields within a TypeORM find request
我正在努力只返回我的 TypeORM 查找請求中的選定字段。
假設有以下請求
const data = await AppDataSource.manager.find(User, {
select: {
id: true,
hash: true,
firstname: true,
lastname: false,
},
take: 10, // Just here to shrink dataset
});
該腳本運行良好,除了它返回我的 model 的每個字段,並初始化了默認值。
[
User {
prefix: 'usr',
hash: 'usr_835b0ad2-XXXXXX',
email: undefined,
accountValidated: false,
role: 'free',
myKeyOne: true,
myKeyTwo: false,
gender: 'unspecified',
lastConnexion: 2023-01-19T10:11:02.733Z,
pendingDeletion: false,
deletionDate: undefined,
firstname: 'Clément',
lastname: undefined,
password: undefined,
facebookId: undefined,
googleId: undefined,
id: 158
},
...
]
當然不能這么用,因為我有廣泛的關系,所以負載會非常重。
您是否知道刪除所有不必要字段的方法/方法? 即我期待
[
User {
id: 124,
hash: 'urs_XXXX',
firstname: 'Clément',
},
...
]
在舊版本的 typeorm 中,我認為你需要 select 和一個字符串數組,試試:
select: ["id", "hash", "firstname"],
經過幾個小時的研究,我終於找到了為什么它會這樣。
TypeORM 依賴於 class 定義和 typescript 所以......如果你有 typescript 默認值或者如果你重寫了你的構造函數,所有“默認”屬性都會被注入。
假設用戶 model
❌你不應該做
@Entity({ name: 'users' })
class User {
@Column()
firstname?: string;
@Column({ nullable: true })
lastname?: string;
@Column({ unique: true, nullable: false })
email!: string;
@Column({ name: 'account_validated', nullable: false})
accountValidated?: boolean = false
//Your other fields...
}
✅你應該做的
@Entity({ name: 'users' })
class User {
@Column()
firstname?: string;
@Column({ nullable: true })
lastname?: string;
@Column({ unique: true, nullable: false })
email!: string;
// Use default argument of the decorator
@Column({ name: 'account_validated', nullable: false, default: false})
accountValidated?: boolean
//Your other fields...
}
如果您需要以某種方式初始化默認值,則創建一個公共 static 方法,該方法返回實體而不是使用構造函數。
@Entity({ name: 'users' })
class User {
//...fields
public static init(...params): User {
let _user = new User()
//...populate your object
return _user
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.