Sequelize 關聯查詢時父表和子表的OR關係查詢

關聯查詢時父表和子表的OR關係查詢

問題描述:

假如我有一個搜索, 傳入一個關鍵字, 便可以按照父表的設備名稱搜索, 也能夠按照子表的設備所在的房間名稱搜索. 第一想法我會這樣寫javascript

Device.findAll({
  where: {
      $or: [
        { device_name: keyword },
        { 'room.room_name': keyword }
      ]
  },
  include: [{
    model: Room,
  }]
})
複製代碼

這時候應該會報錯 SequelizeDatabaseError: column Device.room.room_name does not existjava

其實問題的關鍵就是在外層的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',
    });
複製代碼
相關文章
相關標籤/搜索