使用MySQL的Sequelize,我有一个Car表,该表与Localization表关联。 本地化包含纬度和经度,以显示汽车的本地化位置。
当前,Car包含maxRange属性,该属性对应于Car可以交付的以km为单位的最大距离。
我需要退回给定位置(经度和纬度)附近的所有汽车交付物
我尝试了一个原始查询,并且该查询正常运行,但是在获取包含模型时遇到了一些问题。
var query = "SELECT c.*, m.*, (6371 *acos(cos( radians( ? ) ) * cos(radians( l.lat ) ) * cos(radians( l.long ) - radians( ? )) + sin(radians( ? )) * sin(radians(l.lat)))) `distance` FROM Car c " +
"JOIN Localization l ON c.localizationId = l.id " +
"JOIN Model m ON c.modelId = m.id " +
"HAVING `distance` < c.maxRangeDelivery ORDER BY `distance`;"
db.sequelize.query(query, {
replacements: [lat, lng, lat],
model: Car,
mapToModel: true,
type: db.sequelize.QueryTypes.SELECT
})
我放弃了此解决方案,并重新进行了序列查询,以使其更加正确并轻松获取我的关联。
这是我的新代码(简体)
var includeModelAndMaker = {
model: db.Model,
as: 'model',
include: [{
model: db.Maker,
as: 'maker'
}]
}
Car.findAll({
include: [includeModelAndMaker],
where: {
modelId: modelId,
year: {
$between: [minYear, maxYear]
}
}
}).then(function (cars) {
response.json(JSON.stringify(cars))
})
我不知道如何处理地理空间和Sequelize,我找到了一个示例,但是仅使用固定距离,并且我还没有设法将其适应多个距离(这里的距离是我在Car表中的maxRange)< / p>