我正在将 Sequelize 用于我正在进行的一个 Express 项目。
在一个查询中,我想检索两列的串联结果。
喜欢:
SELECT first_name || ' ' || last_name AS full_name FROM table
我尝试了以下语法并收到错误
router.get('/persons', function(req, res, next) {
models.Person.findAll({
attributes: [models.sequelize.fn('CONCAT', 'first_name', 'last_name')]
})
.then(function(persons) {
res.send(persons);
});
});
错误信息:
SELECT CONCAT('first_name', 'last_name') FROM `Persons` AS `Person`;
Possibly unhandled SequelizeDatabaseError: Error: SQLITE_ERROR: no such function: CONCAT
我使用了
models.sequelize.literal
,它创建了一个代表文字的对象,
在嵌套数组内为其指定别名。
router.get('/persons', function(req, res, next) {
models.Person.findAll({
attributes: [models.sequelize.literal("first_name || ' ' || last_name"), 'full_name']
})
.then(function(persons) {
res.send(persons);
});
});
这对我有用。而不是使用 setter 和 getter 方法
我也遇到了同样的问题,我是这样解决的
const { fn, col } = Person.sequelize;
const res = Person.findAll({
attributes: [ [fn('concat', col('first_name'), ' ', col('last_name')), "FullName"], ...OthersColumns ]
})
希望对你或其他人有帮助