gpt4 book ai didi

mysql - Sequelize : require at least one association

转载 作者:行者123 更新时间:2023-12-05 07:39:51 24 4
gpt4 key购买 nike

我有一个大致如下的关系:

Parent: [id, name]
Children1: [id, parent_id, name]
Children2: [id, parent_id, name]
Children3: [id, parent_id, name]
Children4: [id, parent_id, name]

Parent
.hasMany -> Children1
.hasMany -> Children2
.hasMany -> Children3
.hasMany -> Children4

所以,如果我这样做:

Parent->findOne({
include: [{model: Children1}, {model: Children2}]
})

它只会将 Parent 带到有 children1 和 children2 的地方(即,内部连接)。如果我这样做:

Parent->findOne({
include: [
{model: Children1, required: false},
{model: Children2, required: false}
]
})

它将带来 Parent,如果存在,它将带来 Children1 和/或 Children2。 (即左连接)。

我想做的是当且仅当 Children1 或 Children2 或 ChildrenN 存在时才带 Parent。可以是 ChildrenN 中的任何一个,也可以是所有 ChildrenN。只要至少有1个,我想带上Parent。

我复制了这个question因为这是同样的情况。

有什么想法吗?

最佳答案

这里你需要反转逻辑,不要在你的include中定义你的条件,在你的where中定义,我是这样解决的

await parentTable.findAll({
where:
{
[Op.or]:
[
{ '$FirstChildrenTable.id$': { [Op.ne]: null } },
{ '$SecondChildrenTable.id$': { [Op.ne]: null } }
],
},
include:
[ { model: FirstChildrenTable }, { model: SecondChildrenTable }]
});

它可以是任何字段,但应该使用 id(您的主键)

希望对大家有所帮助:)

关于mysql - Sequelize : require at least one association,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46817379/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com