首页 文章

Sequelize.js:连接没有关联的表

提问于
浏览
6

有没有办法在sequelize中连接没有使用 include 定义的关联的表?这不是this的重复 . 我说的是根本没有关联但有我要加入的列的表 .

例:

select * from bank
left outer join account 
    on account.bank_name = bank.name

无论是否存在适用指定约束的 account 记录,上述查询都将返回表 bank 中的所有记录 .

在sequelize中,如果模型 bankaccountaccount.bank_name = bank.name 关联,则看起来类似于以下内容:

bank.findAll({
    include: [{
        model: account,
        required: false,
    }]
})

但是,如果模型没有关联怎么办?有没有办法编写我自己的自定义 on 部分或等效的:

bank.findAll({
    include: [{
        model: account,
        required: false,
        on: {
            bank_name: Sequelize.col('bank.name')
        }
    }]
})

我依稀记得读过一些关于此的内容,但我现在似乎无法在任何地方找到该文档 . 如果您可以指向文档中的正确部分,将不胜感激 .

1 回答

  • 0

    似乎虽然可以定义自定义 on 条件,但是如果没有首先定义associations,则不可能 include 关系 . findAll方法的文档措辞(在页面上搜索 options.include )暗示了这一点:

    使用左连接急切加载的关联列表 . 支持的是{include:[Model1,Model2,...]}或{include:[{model:Model1,as:'Alias'}]}或{include:['Alias']} . 如果您的关联设置为as(例如X.hasMany(Y,{as:'Z}),则需要在eager加载Y时在as属性中指定Z) .

    options.include[].on 上的文档更简洁:

    为连接提供自己的ON条件 .

    我最终使用Postgres视图作为解决方法解决了我的问题 . 也可以注入raw query并绕过续集限制,但我只会将其用作开发/原型设计黑客,并在 生产环境 中提出更强大/更安全的东西;像视图或存储过程之类的东西 .

相关问题