我在sqlite文件中有两个简单的表: assets:{id,symbol,name} - 所有文本字段 评级:{symbol,rating} - 所有文本字段
我正在尝试获取{id,symbol,name,rating}的查询,但我必须遗漏一些内容,因为评分总是以null
的形式返回。
我尝试的事情:
hasOne
和belongsTo
)references
添加到评级模型中的外键targetKey
字段名称添加到关联这是我的代码:模式,模型,关联和查询:
import Sequelize from 'sequelize';
const sequelize = new Sequelize('sqlite:./stocks.sqlite3', {
operatorsAliases: false,
logging: false
});
const stocksSchema = {
id: {type: Sequelize.STRING, primaryKey: true, allowNull: false},
name: {type: Sequelize.STRING, allowNull: false},
symbol: {type: Sequelize.STRING, allowNull: false}
};
const stocksModel = sequelize.define('stock', stocksSchema, {
tableName: 'stocks',
timestamps: false
});
const ratingsSchema = {
symbol: {type: Sequelize.STRING, primaryKey: true, allowNull: false, references: {model: stocksModel, key: 'symbol'}},
rating: {type: Sequelize.STRING(2), allowNull: false}
};
const ratingsModel = sequelize.define('rating', ratingsSchema, {
tableName: 'ratings',
timestamps: false
});
//association
stocksModel.hasOne(ratingsModel, {foreignKey: 'symbol'});
//query
const getById = async (id) => {
try {
return await stocksModel.findOne({
where: {id: id},
include:[{model: ratingsModel}]})
.then(result => result ? result.dataValues : Promise.reject('not found'));
}
catch(e) {
console.error(e);
throw e;
}
}
有人可以指出我缺少的东西吗?
更新
每个请求,打开日志记录,得到以下SQL:
Executing (default): SELECT `stocks`.`id`, `stocks`.`name`, `stocks`.`symbol`, `rating`.`symbol` AS `rating.symbol`, `rating`.`rating` AS `rating.rating` FROM `stocks` AS `stocks` LEFT OUTER JOIN `ratings` AS `rating` ON `stocks`.`id` = `rating`.`symbol` WHERE `stocks`.`id` = 'XYZ';
结果:
dataValues: {
id: 'XYZ',
name: 'XYZStock',
symbol: 'xyz',
rating: null
}
两个表中都存在symbol = 'xyz'
行。
答案 0 :(得分:0)
我认为问题在于关联,
也添加此行:
ratingsModel.belongsTo(stocksModel, {foreignKey: 'symbol' , targetKey : 'symbol' });