只返回TypeORM查找请求中的选定字段



我在只返回选定字段在我的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
}
}

最新更新