sequelize一对一关联查询出错

node.js+sqlite+sequelize
两个模型,
一个用户信息,一个审核,如下

const BaseInfo = seq.define('user_baseInfo', {
  id: {
    type: DataTypes.INTEGER,
    primaryKey: true,
    autoIncrement: true
  },
  user_id: {
    type: DataTypes.STRING,
    allowNull: true,
    unique: true,
    comment: '用户ID, 唯一',
  },
})

``const AuditInfo = seq.define('user_audit', {
  id: {
    type: DataTypes.INTEGER,
    primaryKey: true,
    autoIncrement: true
  },
  user_id: {
    type: DataTypes.STRING,
    allowNull: true, 
    unique: true,
    comment: '用户ID, 唯一',
  },
  audit: {
    type: DataTypes.STRING,
    allowNull: true, 
    defaultValue:'审核中',
    comment: '审核结果',
  },
  reason: {
    type: DataTypes.STRING,
    allowNull: true,
    comment: '审核原因',
  },
})
...
请问如何将两个模型关联进行查询,查询时带有where条件,条件有BaseInfo 中的字段或AuditInfo 中的字段.

可以通过定义模型之间的关联来实现两个模型的查询。

在这种情况下,可以使用 belongsTo() 或 hasOne() 方法来定义一个模型属于另一个模型。

例如,可以将 BaseInfo 模型与 AuditInfo 模型进行关联,定义 BaseInfo 模型属于 AuditInfo 模型:


```css
BaseInfo.belongsTo(AuditInfo, { foreignKey: 'user_id' });

这将创建一个外键 user_id,它将指向 AuditInfo 模型的主键 id。

接下来,您可以使用 include 选项来将 AuditInfo 模型包含在查询中,以便您可以使用 where 条件进行过滤。

例如,可以使用以下代码查询 BaseInfo 模型,包括其对应的 AuditInfo 模型,并使用 where 条件进行过滤:

```css
BaseInfo.findAll({
  include: [AuditInfo],
  where: {
    [Op.or]: [
      { '$user_id$': { [Op.eq]: '123' } },
      { '$audit.user_id$': { [Op.eq]: '123' } },
      { '$audit.audit$': { [Op.eq]: '审核中' } }
    ]
  }
});

这将返回一个包含所有符合条件的记录的数组。注意,[Op.or] 选项将多个条件连接起来,使用 $ 符号表示模型之间的关联。

  • 这篇文章:sequelize模块的使用 也许能够解决你的问题,你可以看下
  • 除此之外, 这篇博客: sequelize如何建立关联关系表模型来实现联表查询?【多对多篇】中的 模型的定义 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 数据库中的表之间存在一定的关联关系,表之间的关系基于主/外键进行关联、创建约束等。关系表中的数据分为1对1(1:1)、1对多(1:M)、多对多(N:M)三种关联关系。

    在Sequelize中建立关联关系,通过调用模型(源模型)的belongsTo、hasOne、hasMany、belongsToMany方法,再将要建立关系的模型(目标模型)做为参数传入即可。

    model建好后,需要在model导出前,通过model.associate方法来指定表和表之间的关联关系。而在有中间表的情况下,可以直接在中间表里指定了关系,另外两张表就不需要去重复指定了。具体代码如下: