【问题标题】:Sequelize field associationSequelize 字段关联
【发布时间】:2015-09-29 18:18:13
【问题描述】:

我有两张桌子。如何在 Sequelize 中将第一个表中的字段与第二个表中的 id 字段链接?示例:

第一个表:

id | author | text
1  | 2      | 'test1'
2  | 2      | 'test2'
3  | 1      | 'test3'

第二张桌子:

id | name 
1  | John
2  | Jane

第一个表结果中的请求值应在author 字段中包含名称。示例:

first.findAll().then(function(result) {
    console.log(result);
});

返回它:

id | author | text
1  | Jane   | 'test1'
2  | Jane   | 'test2'
3  | John   | 'test3'

(抱歉英语不好)

【问题讨论】:

    标签: database node.js sequelize.js


    【解决方案1】:

    您正在寻找associations

    你的模型看起来像这样

    'use strict';
    module.exports = function(sequelize, DataTypes) {
      var Table1 = sequelize.define('Table1', {
        text: {
          type:DataTypes.STRING
        },
        authorId: {
          type: DataTypes.INTEGER,
          references: "Table2",
          referencesKey: "id",
          allowNull: false
        }
      }, {
        classMethods: {
          associate: function(models) {
            Table1.belongsTo(models.Table2, { foreignKey: 'authorId' })
          }
        }
      });
      return Table1;
    };
    
    'use strict';
    module.exports = function(sequelize, DataTypes) {
      var Table2 = sequelize.define('Table2', {
        name: {
          type:DataTypes.STRING
        }
      }, {
        classMethods: {
          associate: function(models) {
            Table2.hasMany(models.Table1, { foreignKey: 'authorId' })
          }
        }
      });
      return Table2;
    };
    

    您似乎想急切地加载您的作者。

    Table1.findAll({
        include:[
            { model: Table2 }
        ]
    }).then(function(result){
        console.log(result.get({plain:true})
    })
    

    【讨论】:

    • 但是如果table2包含很多字段,如何指定字段name
    • @Vladimir37 Include 将离开加入表格。您最终会得到一个 table1 结果,其中包含一个 Table2 对象,该对象具有字段 name
    • 我不明白。您可以使用示例代码来完成相同的操作,但如果表 2 中有很多字段?
    猜你喜欢
    • 1970-01-01
    • 2021-12-27
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 2021-03-20
    • 2020-07-24
    • 2017-08-15
    相关资源
    最近更新 更多