【问题标题】:Sequelize: Parent with at least one children续集:父母至少有一个孩子
【发布时间】:2016-11-25 01:57:46
【问题描述】:

我的关系大致如下:

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 的地方(即 Inner join)。 如果我这样做:

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

它会带来 Parent,如果有的话,它会带来 Children1 和/或 Children2。 (即左连接)。

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

有什么想法吗?

【问题讨论】:

    标签: mysql node.js sequelize.js


    【解决方案1】:

    required: true 添加到您的包含对象中,以使每个连接都成为右连接。您有四个单独的子表的任何原因?

    【讨论】:

    • 这只是一个例子,每个“孩子”都是一张不同的桌子,上面放着不同的东西。那么,required: true 会创建 Right join,而缺少“required”属性会创建 Inner join?
    • 我试过你说的,它仍然会创建一个内部连接,需要:true
    • 你知道吗,当使用 required true 时,我的 include 上总是有一个 where 子句。也许这是一个要求。刚才不在我的笔记本电脑上,但我会在我的时候检查一下。
    猜你喜欢
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多