我在只返回选定字段在我的TypeORM查找请求中挣扎。
假设以下请求
const data = await AppDataSource.manager.find(User, {
select: {
id: true,
hash: true,
firstname: true,
lastname: false,
},
take: 10, // Just here to shrink dataset
});
脚本工作得很好,除了它返回我的模型的每个字段,初始化默认值。
[
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
},
...
]
当然,它是不可用的,因为我有广泛的关系,因此有效负载将非常重。
你知道一种方法/方法来删除所有不必要的字段吗?例如:I'm expected
[
User {
id: 124,
hash: 'urs_XXXX',
firstname: 'Clément',
},
...
]
在旧版本的typeform我认为你需要选择一个数组的字符串,尝试:
select: ["id", "hash", "firstname"],
查看旧版本的文档:https://github.com/typeorm/typeorm/blob/bc60dd559ba42af083ddea17f01205c78c83c7e0/docs/find-options.md
经过几个小时的研究,我终于发现了它为什么会这样。
TypeORM依赖于类定义和类型脚本,所以…如果你有typescript默认值或者你重写了构造函数,所有的"default"属性被注入。
假设User模型
❌你不应该做
@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...
}
如果你需要初始化一个默认值,然后创建一个公共静态方法它返回实体而不是使用构造函数。
@Entity({ name: 'users' })
class User {
//...fields
public static init(...params): User {
let _user = new User()
//...populate your object
return _user
}
}