在 Sequelize 中将模型的条件与其关联的条件结合起来

Posted

技术标签:

【中文标题】在 Sequelize 中将模型的条件与其关联的条件结合起来【英文标题】:Combine model's condition with its association's condition in Sequelize 【发布时间】:2017-08-10 09:12:58 【问题描述】:

有没有办法通过适用于自己的字段适用于其关联字段的条件来查找模型?

给定模型ModelAssociation,其中每个Model 都有一个Association

const Model = sequelize.define('model', 
    name: sequelize.STRING,
);

const Association = sequelize.define('association', 
    name: sequelize.STRING,
);

Association.belongsTo(Model);
Model.hasOne(Association);

我想找到所有Models,要么有一个name 等于“文本”,要么有一个Association 和一个name 等于“文本”。

到目前为止,我提出了Sequelize.literal 的解决方案,但看起来不够健壮。

Model.findAll(
    attributes: ['id', 'name'],
    include: [
        model: Association,
        attributes: [],
    ],
    where: 
        $or: [
             name: 'test' ,
            Sequelize.literal('association.name = \'test\''),
        ],
    ,
);

有没有更好的办法?

【问题讨论】:

【参考方案1】:

文档中描述了此功能:Top level where with eagerly loaded models。

Model.findAll(
    attributes: ['id', 'name'],
    include: [
        model: Association,
        attributes: [],
    ],
    where: 
        $or: [
             name: 'test' ,
             '$association.name$':  'test' ,
        ],
    ,
);

【讨论】:

以上是关于在 Sequelize 中将模型的条件与其关联的条件结合起来的主要内容,如果未能解决你的问题,请参考以下文章

Sequelize - 在验证模型的关联时获取正确的路径

如何在 sequelize.js 中有条件地加载关联?

按关联模型排序时,Sequelize 抛出错误“无法找到模型 x 的有效关联”

为啥 Sequelize 认为我的模型没有关联?

使用 sequelize 关联不同的模型?

使用 Sequelize.js 和 PostgreSQL 在关联模型上查询 JSONB 字段