nodejs使用hasmany

时间:2018-10-06 07:31:31

标签: node.js sequelize.js

我是nodejs的新手。我正在使用nodejs创建新的应用程序。我想使用hasmany关系加入两个表城市和州。

这是我的状态模型state.js

module.exports = function(sequelize, DataTypes) {
  return sequelize.define('state', {    
    name: {
      type: DataTypes.STRING(255),
      allowNull: true
    },    
    id: {
      type: DataTypes.INTEGER(10).UNSIGNED,
      allowNull: false,
      primaryKey: true,
      autoIncrement: true
    },
    createdAt: {
      type: DataTypes.DATE,
      allowNull: true
    },
    updatedAt: {
      type: DataTypes.DATE,
      allowNull: true
    }
  }, {
    tableName: 'state'
  });
};

这是我的城市模型city.js

module.exports = function(sequelize, DataTypes) {
  return sequelize.define('city', {
    state: {
      type: DataTypes.INTEGER(11),
      allowNull: true
    },
    name: {
      type: DataTypes.STRING(255),
      allowNull: true
    },    
    id: {
      type: DataTypes.INTEGER(10).UNSIGNED,
      allowNull: false,
      primaryKey: true,
      autoIncrement: true
    },
    createdAt: {
      type: DataTypes.DATE,
      allowNull: true
    },
    updatedAt: {
      type: DataTypes.DATE,
      allowNull: true
    }
  }, {
    tableName: 'city'
  });
};

这是我的citycontroller.js

let City = require('../models').city;
let State = require('../models').state;
let message = require('../../config/message');
let Boom = require('boom');

module.exports = {

    listCity: async(request,h) =>{
        let stateid = request.query.stateid;
        try{
            let searchQuery = {};           
            if(stateid) searchQuery.state = stateid;
            let listCity = await City.findAll({ where:searchQuery});            
            if(listCity.length){
                let response = {
                    "statusCode": 200,
                    "message":message.DATAFOUND,
                    "result": listCity
                };
                return h.response(response).code(200);
            }else{
                return h.response(response).code(204);
            }
        }catch(err){
            return Boom.badRequest(err.message);
        }    
    },

};

输出:

{
    "statusCode": 200,
    "message": "Data found",
    "result": [
        {
            "state": 1,
            "name": "Los Angeles",
            "id": 1,
            "createdAt": null,
            "updatedAt": null
        },
        {
            "state": 1,
            "name": "San Francisco",
            "id": 2,
            "createdAt": null,
            "updatedAt": null
        },
        {
            "state": 5,
            "name": "Southhampton",
            "id": 3,
            "createdAt": null,
            "updatedAt": null
        }
    ]
}

现在仅列出城市详细信息。但是我还需要在每个城市下加入州的详细信息。

1 个答案:

答案 0 :(得分:0)

  1. 如果要从状态表中选择数据而不是在状态模型中定义关系。

    module.exports = function(sequelize, DataTypes) {
      const state = sequelize.define('state', {    
      name: {
          type: DataTypes.STRING(255),
          allowNull: true
      },    
      id: {
          type: DataTypes.INTEGER(10).UNSIGNED,
          allowNull: false,
          primaryKey: true,
          autoIncrement: true
      },
      createdAt: {
         type: DataTypes.DATE,
         allowNull: true
      },
      updatedAt: {
         type: DataTypes.DATE,
         allowNull: true
      }
    }, {
      tableName: 'state'
    });
    
      state.associate = function(model){
          models.state.hasMany(models.city){
          foreignKey: 'state'
      }
      return state;
    }
    
    };
    
  2. 或者,如果您要从城市表中选择数据,而不是在城市表中定义类似的hasOne关系。