如何使用 sequelize 执行原始 PostGIS 查询
How to perform raw PostGIS queries with includes using sequelize
尝试使用 sequelize 的内置 ORM 便利性包括带有原始 PostGIS 查询的语法。
这个调用正确地加入了相关的 promotionImage 和类别表,但它没有像我需要的那样对我的数据库进行地理查询:
promotion.findAll({
include: [{
model: promotionImage
}, {
model: category
}]
}).then(promoters => {
res.json(promoters)
}).catch(err => {
console.log('ERROR: ', err)
})
另一方面,此查询在提供的 lat/lng 范围内正确找到了 "promotions",但它没有正确加入关联的 promotionImage 和类别表:
const query = '\
SELECT * \
FROM "promotions" \
WHERE "promotions"."location" && ST_MakeEnvelope(:southWestLng, :southWestLat, :northEastLng, :northEastLat)'
replacements = {
southWestLng,
southWestLat,
northEastLng,
northEastLat
}
db.sequelize.query(query, {
replacements,
type: sequelize.QueryTypes.SELECT,
model: promotion,
include: [{
model: promotionImage
}, {
model: category
}]
}).then(promoters => {
res.json(promoters)
}).catch(err => {
console.log('ERROR: ', err)
})
有没有一种方法既可以使用 ST_MakeEnvelope
语法进行查询,又可以使用 sequelize 和 postGIS 包含来自其他模型的数据?
Sequelize.query()
不支持 include
,您可以使用 Sequelize.fn()
和 findAll
promotion.findAll({
where: {
location: {
$overlap: db.sequelize.fn('ST_MakeEnvelope', southWestLng, southWestLat, northEastLng, northEastLat)
}
},
include: [{
model: promotionImage
}, {
model: category
}]
}).then(promoters => {
res.json(promoters)
}).catch(err => {
console.log('ERROR: ', err)
})
尝试使用 sequelize 的内置 ORM 便利性包括带有原始 PostGIS 查询的语法。
这个调用正确地加入了相关的 promotionImage 和类别表,但它没有像我需要的那样对我的数据库进行地理查询:
promotion.findAll({
include: [{
model: promotionImage
}, {
model: category
}]
}).then(promoters => {
res.json(promoters)
}).catch(err => {
console.log('ERROR: ', err)
})
另一方面,此查询在提供的 lat/lng 范围内正确找到了 "promotions",但它没有正确加入关联的 promotionImage 和类别表:
const query = '\
SELECT * \
FROM "promotions" \
WHERE "promotions"."location" && ST_MakeEnvelope(:southWestLng, :southWestLat, :northEastLng, :northEastLat)'
replacements = {
southWestLng,
southWestLat,
northEastLng,
northEastLat
}
db.sequelize.query(query, {
replacements,
type: sequelize.QueryTypes.SELECT,
model: promotion,
include: [{
model: promotionImage
}, {
model: category
}]
}).then(promoters => {
res.json(promoters)
}).catch(err => {
console.log('ERROR: ', err)
})
有没有一种方法既可以使用 ST_MakeEnvelope
语法进行查询,又可以使用 sequelize 和 postGIS 包含来自其他模型的数据?
Sequelize.query()
不支持 include
,您可以使用 Sequelize.fn()
和 findAll
promotion.findAll({
where: {
location: {
$overlap: db.sequelize.fn('ST_MakeEnvelope', southWestLng, southWestLat, northEastLng, northEastLat)
}
},
include: [{
model: promotionImage
}, {
model: category
}]
}).then(promoters => {
res.json(promoters)
}).catch(err => {
console.log('ERROR: ', err)
})