sequelize.where function not working in model scope
See original GitHub issueI am trying to use a sequelize.where function in one of the scopes in one of my models. However, when I then do a query with that scope, the query gets mangled.
What you are doing?
Run node test.js
to get the result.
models.js
module.exports = function(sequelize, DataTypes) {
const Store = sequelize.define('store', {
name: {
type: DataTypes.STRING,
validate: {
notEmpty: true
}
},
location: DataTypes.GEOGRAPHY,
}, {
scopes: {
distance: function(location, radius){
return {
where: sequelize.where(
sequelize.fn(
'ST_Distance',
sequelize.col('store.location'),
sequelize.fn(
'ST_GEOGFROMTEXT',
'POINT(' + location.longitude + ' ' + location.latitude + ')'
)
),
'<=',
radius
)
};
}
}
});
return {
Store: Store
};
};
test.js
const Sequelize = require('sequelize');
let credentials = require('./credentials');
const db = new Sequelize(credentials.TEST_DATABASE_URL, {
logging: true
});
const models = db.import(__dirname + '/models');
let location = {latitude: 51.04, longitude: 36.09};
let radius = 5;
models.Store.scope([{
method: [
'distance',
location,
radius
]
}]).findAll()
.then(function(result){
console.log(result);//just logging the result
});
What do you expect to happen?
The query to execute without errors and pull all stores that are less than or equal to 5 meters from the provided latitude and longitude. Since this code sample doesn’t place any stores in the db, I just expect this code sample to execute without error.
What is actually happening?
The query executes with the error SequelizeDatabaseError: column store.attribute does not exist
Output: The query that runs follows: SELECT "id", "name", "location", "createdAt", "updatedAt", "userId" FROM "stores" AS "store" WHERE "store"."attribute" = ST_Distance("store"."location", ST_GEOGFROMTEXT('POINT(36.09 51.04)')) AND "store"."comparator" = '<=' AND "store"."logic" = 5;
Dialect: postgres Sequelize version: 3.23.6
Issue Analytics
- State:
- Created 7 years ago
- Reactions:5
- Comments:13 (4 by maintainers)
Please don’t +1 issues. It clutters the thread without adding value to the discussion and spams maintainers with notifications. Use GitHub reactions to upvote features.
Same