【问题标题】:checks on associated models from top model where query从查询的顶级模型检查关联模型
【发布时间】:2020-02-28 08:39:19
【问题描述】:

我有一个模型 Booking,它与酒店有 hasMany 关系,而酒店与供应商有一对一的关系。 我需要的是,获取所有供应商 ID = 33333 的预订。 我正在尝试这个

BOOKINGS.findAll({
        where: {
            'hotels.supplier.supplier_id' : '32',                
        },
        include: [
            {
            model: HOTELS,
            include: [
                {
                    model: SUPPLIERS,
            ],

            }
        ],
        limit : 30,
        offset: 0

    })

它会引发类似hotels.supplier... column not found 的错误。我尝试了所有方法,因为在 sequelze 的文档中,它只提供了添加检查的解决方案,该检查添加了我无法使用的包含位置,因为它添加了子查询。 我不想在包含数组中添加 where check 以及供应商模型,因为它添加了子查询,所以如果我有 1000 个预订,那么对于所有预订,它将添加子查询,这会使我的 api 崩溃。

我在 Sequelize 中需要类似这个查询的解决方案。

从BOOKINGS 中选择col1,col2,col3 让BOOKINGS.booking_id = HOTELS.booking_id 加入酒店,在BOOKINGS.supplier_id = SUPPLIERS.supplier_id 内部加入供应商

【问题讨论】:

    标签: node.js sequelize.js sequelize-typescript


    【解决方案1】:

    在包含对象中添加where 不会添加子查询。它只会在应用于供应商模型的JOIN 中添加一个 where 子句。无论如何,它不会使您的 API 崩溃。您可以在本地机器上对其进行多次测试以确保。

    BOOKINGS.findAll({
       include: [
          {
             model: HOTELS,
             include: [
                {
                   model: SUPPLIERS,
                   where: { supplier_id: 32 }
                }
             ]
          }
       ],
       limit: 30,
       offset: 0
    })
    

    如果您仍想在顶层使用查询,您可以使用 sequelize.where+ sequelize.literal,但您需要使用 sequelize 分配的表别名。例如,供应商表的此别名将不起作用 hotels.supplier.supplier_id。 Sequelize assings 表别名,如下所示:

    BOOKINGS.findAll({
        where: sequelize.where(sequelize.literal("`hotels->suppliers`.supplier_id = 32")),
        include: [
            {
                model: HOTELS,
                include: [SUPPLIERS]
            }
        ],
        limit: 30,
        offset: 0
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      • 2017-08-29
      相关资源
      最近更新 更多