无法在Sequelize中加入表格

时间:2018-01-24 22:35:45

标签: javascript node.js sequelize.js

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

我正在尝试获取{id,symbol,name,rating}的查询,但我必须遗漏一些内容,因为评分总是以null的形式返回。

我尝试的事情:

  1. 添加2个关联(hasOnebelongsTo
  2. references添加到评级模型中的外键
  3. targetKey字段名称添加到关联
  4. 这是我的代码:模式,模型,关联和查询:

    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'行。

1 个答案:

答案 0 :(得分:0)

我认为问题在于关联,

也添加此行:

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