续集关联有一个,属于
问题是,我不能得到关系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 })