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] 选项将多个条件连接起来,使用 $ 符号表示模型之间的关联。
数据库中的表之间存在一定的关联关系,表之间的关系基于主/外键进行关联、创建约束等。关系表中的数据分为1对1(1:1)、1对多(1:M)、多对多(N:M)三种关联关系。
在Sequelize中建立关联关系,通过调用模型(源模型)的belongsTo、hasOne、hasMany、belongsToMany方法,再将要建立关系的模型(目标模型)做为参数传入即可。
model建好后,需要在model导出前,通过model.associate方法来指定表和表之间的关联关系。而在有中间表的情况下,可以直接在中间表里指定了关系,另外两张表就不需要去重复指定了。具体代码如下: