我使用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:
ForeignKey连接
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个不希望的外国人。
答案 0 :(得分:0)
解决方法是为键设置别名
我的错是在belongsTo
协会做这件事
它必须在hasMany
协会。
db.DictKey.hasMany(db.DictValue, {
foreignKey: 'key_id',
as : 'value1'
});
db.DictValue.belongsTo(db.DictKey,{
foreignKey : 'key_id',
});
db.DictKey.hasMany(db.DictValue, {
foreignKey: 'key_id',
as : 'value2'
});
db.DictValue.belongsTo(db.DictKey,{
foreignKey : 'key_id',
});