node.js - typeorm 在不使用查询构建器 nodejs 的情况下进行相关搜索
问题描述
我尝试使用 typeorm 搜索一些相关的字段这是我的 UserEntity
@OneToOne(() => UserAuth, userAuth => userAuth.user, {
eager: true,
cascade: true,
onDelete: 'CASCADE',
})
@JoinColumn({name:'id'})
userAuth?: UserAuth;
在 UserAuthEntity 我有
@PrimaryGeneratedColumn()
id!: number;
@Column()
username: string;
@OneToOne(() => UserEntity, user => user.UserAuth)
@JoinColumn({ name: 'user_id' })
user?: UserEntity;
数据库中的示例数据
ID | 用户名 |
---|---|
1 | 测试用户 |
在我的查询中我使用
this.userRepository.find({
relations: [ 'userAuth' ],
where: {
userAuth: {
username: 'testUser'
}
}
}); //this one return null data
我总是得到空数据,但如果我将用户名更改为 id,我得到了正确的数据
this.userRepository.find({
relations: [ 'userAuth' ],
where: {
userAuth: {
id: 1
}
}
}); // this query return data
如果我使用查询生成器,每一项都可以正常工作,但是他们是否可以让这个查询正常工作?
解决方案
看起来 find/findOne 不允许通过嵌套关系属性进行过滤。
你应该QueryBuilder
改用。
检查下面的示例代码:
const username = 'testUser';
await this.ormRepository
.createQueryBuilder("userEntity")
.innerJoinAndSelect("userEntity.userAuth", "userAuth")
.where("userAuth.username= :username", { username })
.getMany();
您可以在此链接参考中查看有关此问题的更多信息
推荐阅读
- php - 如何使用 PHP 运行 python 脚本并创建文件?
- erlang - 使用 Common Test 测试 gen_server 模块
- google-maps - google maps API geocoding 获取地址组件
- python - 如何使用 Pandas 处理来自 CSV 的不规则格式
- mapbox - mapbox setPaintProperty 方法是否处理表达式?
- php - WooCommerce 产品附加信息简码
- linux - Linux shell 脚本中的 -z 和 -o 命令是什么意思?
- ruby-on-rails - 设计 - 如果用户停用,显示页面以允许他们重新激活
- java - 向下滚动时查看寻呼机销毁项目
- sql-server - 在 SSRS 中查找从去年开始一周的开始日期