gpt4 book ai didi

node.js - 检查来自顶级模型的关联模型,其中查询

转载 作者:行者123 更新时间:2023-12-03 22:19:45 24 4
gpt4 key购买 nike

我有一个模型 Booking,它与酒店有很多关系,而酒店与供应商有一对一的关系。
我需要的是,获取供应商 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 中的查询这样的解决方案。

Select col1,col2,col3 from BOOKINGS let join HOTELS on BOOKINGS.booking_id = HOTELS.booking_id, inner join SUPPLIERS on BOOKINGS.supplier_id = SUPPLIERS.supplier_id

最佳答案

在包含对象中添加 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
})

关于node.js - 检查来自顶级模型的关联模型,其中查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58669559/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com