假如我有一个搜索, 传入一个关键字, 便可以按照父表的设备名称搜索, 也能够按照子表的设备所在的房间名称搜索. 第一想法我会这样写javascript
Device.findAll({
where: {
$or: [
{ device_name: keyword },
{ 'room.room_name': keyword }
]
},
include: [{
model: Room,
}]
})
复制代码
这时候应该会报错 SequelizeDatabaseError: column Device.room.room_name does not exist
java
其实问题的关键就是在外层的where怎么使用子表的column的问题:git
参考连接: 传送门github
Device.findAll({
where: {
$or: [
{ device_name: keyword },
sequelize.where(sequelize.col('room.room_name'), 'ILIKE', `%${keyword}%`),
]
},
include: [{
model: Room,
}]
})
复制代码
参考连接: 传送门bash
Device.findAll({
where: {
$or: [
{ device_name: keyword },
{ '$room.room_name$': keyword }
]
},
include: [{
model: Room,
as: 'room',
}]
})
复制代码
这个方法的关键是 $$
中间可使用关联名称, 因此关联的时候使用asapp
app.model.Home.hasOne(app.model.VrHomeInfo, {
foreignKey: 'home_id',
constraints: false,
scope: app.Sequelize.where(app.Sequelize.col('vr_home_info.client_id'), '=', app.Sequelize.col('home.client_id')),
as: 'vr_home_info',
});
复制代码