我正在尝试编写一个序列化查询,其中包括来自具有hasMany关系的不同表的关系。我希望查询返回,如果相关表中的某些列符合我的条件,或者相关表中没有与主表中的外键相关的行。
请考虑两种不同的模型,主要的一种是文件夹,具有ID,名称等列,而相关的表是folderOwners,其ID,folderId和groupId列显示哪些文件夹归哪个组拥有。因此,文件夹可以具有多个所有者组。
include: [{
association: "owners",
required: true,
where: {
groupId: {[Op.in]: userGroups.map(group => group.id)}
}
}]
我可以获取用户所属组之一拥有的文件夹,但是如果相关表中没有行,我想获取所有文件夹,这意味着该文件夹不归任何人所有。 我尝试将必填项更改为false,并在以下类似位置使用Op.or
required: true,
where: {
[Op.or]: [
{groupId: {[Op.in]: userGroups.map(group => group.id)}},
{groupId: {[Op.eq]: null}}
],
}
那么,有什么方法可以实现我想要的?
答案 0 :(得分:1)
如果我正确理解了您的问题,请尝试以下代码:
Folder.findAll({include: [{model: Group, required: false}])
它将获取所有带有和不带有组的文件夹
答案 1 :(得分:1)
您可以使用如下语法从父模型的“where”对象引用嵌套模型的列:“$AssociatedTableName.columnName$”
Folder.findAll({
where: {
[Op.or]: [
{ '$Group.id$': null },
{
'$Group.id$': {
[Op.in]: [ids],
},
},
],
},
include: [
{
model: Group,
as: 'Group',
required: false,
},
],
});