首页 文章

无法在Sequelize中加入表格

提问于
浏览
0

我在sqlite文件中有2个简单的表:assets:{id,symbol,name} - 所有文本字段等级:{symbol,rating} - 所有文本字段

我正在尝试获得{id,symbol,name,rating}的查询,但我必须遗漏一些东西,因为评级总是以 null 的形式返回 .

我试过的事情:

  • 添加2个关联( hasOnebelongsTo

  • 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 回答

  • 0

    我认为这个问题与关联有关,

    添加此行也:

    ratingsModel.belongsTo(stocksModel, {foreignKey: 'symbol' , targetKey : 'symbol' });
    

相关问题