嗨,我目前正在尝试从数据库查询记录,这些是条件
所以我试过了
let order_by = req.query.orderby;
let order = req.query.order;
let page = req.query.pagenum;
let perpage = req.query.parpage;
let searchword = req.query.foodsearch;
let offset = (parseInt(page) - 1) * parpage;
let foods = await models.food.findAll({
limit: parseInt(perpage),
offset: offset,
order: [
[order_by, order]
],
// where: Sequelize.literal
// (
// `MATCH
// (Name, Place, RestoNum, Ingredient, ChefName, Region...)
// AGAINST
// ( ? IN NATURAL LANGUAGE MODE)`,
// { replacements: [ searchword ] }
// )
});
但是这段代码中的注释部分似乎是错误的。我尝试了原始查询,但后来我无法参数化这些 order by、order、offset、limit 变量。
我不想像 ${orderby} 一样添加它们,因为它有风险。
如果您对此问题有任何解决方案,请告诉我。
先感谢您!
最佳答案
您混淆了 Sequelize.literal()
和 sequelizeInstance.query()
API。
.literal()
only take a string 。如果您想在查询中使用对象表示法,您的注释代码将起作用。除了没有第二个论点。您需要将搜索词连接或插入到 AGAINST
子句中。 Also, don't forget your quotes 。 literal()
的输出本质上是一个字符串。您的 MySQL FTS 参数将需要正确类型的引号,就像它们出现在原始 SQL 查询中一样。 .query()
DOES take an options parameter. 通过这个,你不必使用字符串插值, you can use named replacements or bound-parameters 。这不仅允许您放入 searchword
参数,还允许您放入任何您想要的 ORDER BY 子句。 我会选择选项 1。这就是我们在 MS SQL 中为我们的 FTS 所做的。
关于mysql - 使用参数sequelize全文查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63589623/