如何解决PostgreSQL类型Orm过滤器manyToMany关系
我有2个具有ManyToMany关系的实体:
//branch entity
@ManyToMany(
(type) => User,(e) => e.branches
)
users: User[];
//user entity
@ManyToMany(
(type) => Branch,(e) => e.users,{ eager: true,cascade: false }
)
@JoinTable()
branches: Branch[];
@IsEnum(Role)
@Column('text',{ default: Role.Client })
role: Role;
如果用户列表中不包含角色为“客户端”的用户,我想查找分支。
如果我有,我需要这个
[
Branch {
id: '98007770-c924-43cd-988c-774492e1e759',name: 'poslovnica1',users: [ {role:'client'},{role:'superAdmin'} ]
},Branch {
id: '787007770-c924-43cd-988c-774492e1e759',name: 'poslovnica13',Branch {
id: '36f5b1ad-6553-4b2f-936b-33fb4ca8e73e',name: 'poslovnica2',users: [ {role:'superAdmin' }]
}
]
在我想要获取的过滤器之后,如果所有分支都没有用户 角色“客户”。 'superAdmin'或:
[
Branch {
id: '36f5b1ad-6553-4b2f-936b-33fb4ca8e73e',users: [ {role:'superAdmin'} ]
}
]
解决方法
欢迎使用StackOverflow!
您确实接近它!
我会尝试以下代码(使用lodash):
import {values,omit} from 'lodash';
// ....
const notClientRoles = values(omit(Role, Role.Client));
await this.branchRepository
.createQueryBuilder('b')
.leftJoin('b.users','users')
.where('users.client IN(:...roles)',{ roles: notClientRoles })
.getMany();
详细信息:
const notClientRoles = values(omit(Role, Role.Client))
用于从您想要的角色中删除Client
角色(我们从values
使用omit
和lodash
方法)。我们将其包装在变量中,然后在where
子句中使用它,如下所示:
.where('users.client IN(:...roles)',{ roles: notClientRoles })
让我知道是否有帮助:)
,我尝试使用lodash时得到相同的结果,但是换种方式:
def write_excel_one(numpy_array):
workbook = xlsxwriter.Workbook('C:\\Users\\GTS\\Desktop\\Network Interdiction Problem\\Manuscript\\rel.xlsx')
worksheet = workbook.add_worksheet()
for row,data in enumerate(numpy_array):
# worksheet.write_row(row,data)
worksheet.write_number(0,row,data)
workbook.close()
但是我需要按用户而不是用户来过滤分支...感谢您的尝试!
,我得到了我想要的东西:
retVal = await this.branchRepository.find({ relations: ['users'] });
retVal = retVal.filter((branch: Branch) => {
if (!branch.users.some((user) => user.role === Role.Client)) return branch;
});
但我希望在可能的情况下改善这一点...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。