续集关联有一个,属于

问题是,我不能得到关系hasOne,它不急于加载状态types的对象。

所有查询都在现有的表上完成。

这里是客户表,最重要的是cst_state_type字段:

 module.exports = function(sequelize, DataTypes) { return sequelize.define('customer', { customer: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true, allowNull: true, validate: { isNumeric: true } }, first_name: { type: DataTypes.STRING(100), validate: { isAlphanumeric: true } }, last_name: DataTypes.STRING(100), identity_code: { type: DataTypes.STRING(20), allowNull: true, validate: { isNumeric: true } }, note: DataTypes.STRING(1000), birth_date: DataTypes.DATE, created_by: DataTypes.INTEGER, updated_by: DataTypes.INTEGER, cst_type: DataTypes.INTEGER, cst_state_type: { type: DataTypes.INTEGER, } }, { tableName: 'customer', updatedAt: 'updated', createdAt: 'created', timestamps: true }); }; 

cst_state_type表:

 module.exports = function(sequelize, DataTypes) { return sequelize.define('StateType', { cst_state_type: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true, validate: { } }, name: DataTypes.STRING(100), }, { tableName: 'cst_state_type', timestamps: false }); }; 

如何描述关系:

  global.db.Customer.hasOne(global.db.StateType, { foreignKey: 'cst_state_type', as: 'state_type' }); global.db.StateType.belongsTo(global.db.Customer, { foreignKey: 'cst_state_type' }); 

并创build热切的加载查询:

  db.Customer.findAll( { include: [ { model: db.Address, as: 'addresses' }, { model: db.StateType, as: 'state_type' } ] }) .success(function (customers) { res.json(200, customers); }) .fail(function (error) { res.json(500, { msg: error }); }); 

我很确定这个错误在你的关联中。 从描述表结构的方式来看,关联应该如下所示:

 global.db.Customer.belongsTo(global.db.StateType, { foreignKey: 'cst_state_type', as: 'state_type' }); global.db.StateType.hasMany(global.db.Customer, { foreignKey: 'cst_state_type' }); 

据我了解,同样的状态可以分配给许多客户,因此StateType.hasMany 。 customer – > statetype的关系是一个“back-assocation”,意思是外键在customer表中。 为此你需要belongsTo

谢谢你的回答,这对我很有帮助。 您还可以使用类方法直接在您的模型中添加关系。 我在下面添加了一个例子,希望这有助于!

用户模型(文件)

 module.exports = function(sequelize, DataTypes){ var User = sequelize.define( 'User', { name: { type: DataTypes.STRING, allowNull: false } }, { classMethods:{ associate:function(models){ User.hasMany(models.Comment, { foreignKey: 'userId'} ); } } } ); return User; }; 

评论模型(文件):

 module.exports = function(sequelize, DataTypes){ var Comment = sequelize.define( 'Comment', { text: { type: DataTypes.STRING, allowNull: false } }, { classMethods:{ associate:function(models){ Comment.belongsTo(models.User, { foreignKey:'userId'} ); } } } ); return Comment; }; 

你不需要设置外键,如果你没有指定外键的话,后台程序会处理它。

然后在查询中:

 models.Comment.find({ where: { id: id }, include: [ models.User ], limit: 1 })