【发布时间】:2017-01-22 00:36:24
【问题描述】:
我正在为我的查询使用 Sequelize。
一切都很好,除了一个案例。
我想要这个
return db.sequelize.query(`
SELECT k.name as Name,
k._id as _id,
k.notice as notice,
dv1.value as value1,
dv2.value as value2,
dv2._id as v_id
FROM dict_Keys k
LEFT JOIN dict_Values dv1 ON k._id=dv1.key_id and dv1.lang_id=` + req.params.id + `
LEFT JOIN dict_Values dv2 ON k._id=dv2.key_id and dv2.lang_id=` + req.params.id2 + ``, {
type: Sequelize.QueryTypes.SELECT
})
.then(handleEntityNotFound(res))
.then(respondWithResult(res))
.catch(handleError(res));
在 ORM 模型中翻译。
但我找不到如何在同一个 ForeignKey 上引用两次。
两次包含模型会引发错误,不能仅包含两次相同的模型。
使用别名声明第二个模型需要创建两次相同的外键但命名不同,这是不想要的!
Sequelize 中是否有解决方案,或者目前只声明 ForeignKey 两次?
EDIT1:
外键连接
db.DictKey.hasMany(db.DictValue, {
foreignKey: 'key_id'
});
尝试在同一个 ForeignKey 上包含两次
export function showAll(req, res) {
return DictKey.findAll({
include:[{
model: DictValue,
where:{
lang_id: req.params.id
}
},
{
model: DictValue,
where:{
lang_id: req.params.id
}
}
]
})
.then(handleEntityNotFound(res))
.then(respondWithResult(res))
.catch(handleError(res));
}
错误 在 From 子句中多次指定相关名称“dict_Values”。
分配两次
db.DictValue.belongsTo(db.DictKey,{
as: 'lang1',
foreignKey: 'key_id'
});
db.DictValue.belongsTo(db.DictKey,{
as: 'lang2',
foreignKey: 'key_id'
});
我也尝试过类似的方法,但不记得确切,但它生成了 2 个不希望出现的 ForeignKey。
【问题讨论】:
-
您当前查询数据库的方式容易出现SQL injection attacks,您可以使用replacements in sequelize.js 来解决这个问题。
-
如果我可以做类似 findAll()... 在同一个外键上包含同一个模型两次。我什至不需要更换。这就是这里的问题。我根本不想使用 sequelize.query
-
请显示您在尝试包含时使用的代码,特别是您尝试表达条件的方式。
-
编辑了一些信息。
标签: sql-server node.js express sequelize.js