我在sqlite文件中有2个简单的表:assets:{id,symbol,name} - 所有文本字段等级:{symbol,rating} - 所有文本字段
我正在尝试获得{id,symbol,name,rating}的查询,但我必须遗漏一些东西,因为评级总是以 null
的形式返回 .
我试过的事情:
-
添加2个关联(
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;
}
}
有人可以指出我错过了什么吗?
Update:
每个请求,打开日志记录,得到以下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'
行 .
1 回答
我认为这个问题与关联有关,
添加此行也: