大家可以看到我的问题与标题描述有关,我创建了一个用户模型和一个续集的照片模型,基本上一个用户可以拍摄许多照片,但是每张照片只能与1个用户有关。
我的用户模型
"use strict"; var sequelize = require('./index'); var bcrypt = require('bcrypt-nodejs'); var Foto = require('./Foto'); module.exports = function (sequelize, DataTypes) { var User = sequelize.define("User", { username: { type: DataTypes.STRING, allowNull: false, unique: true, validate: { isUnique: function (value, next) { var self = this; User.find({ where: { username: value } }) .then(function (user) { // reject if a different user wants to use the same username if (user && self.id !== user.id) { return next('username already in use!'); } return next(); }) .catch(function (err) { return next(err); }); } } }, email: { type: DataTypes.STRING, allowNull: false, unique: true, validate: { isUnique: function (value, next) { var self = this; User.find({ where: { email: value } }) .then(function (user) { // reject if a different user wants to use the same email if (user && self.id !== user.id) { return next('Email already in use!'); } return next(); }) .catch(function (err) { return next(err); }); } } }, typeOfUser: { type: DataTypes.INTEGER, allowNull:true, defaultValue:null }, country: { type: DataTypes.STRING, allowNull:true, defaultValue:null }, birthDate:{ type: DataTypes.DATEONLY, allowNull:true, defaultValue:null }, reports: { type: DataTypes.INTEGER, defaultValue: 0 }, points: { type: DataTypes.INTEGER, defaultValue: 0 }, password: { type: DataTypes.STRING, allowNull:false }, numberFotos: { type: DataTypes.INTEGER, defaultValue: 0 } }, { classMethods: { generateHash: function (password) { return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null); }, }, instanceMethods: { validPassword: function (password) { return bcrypt.compareSync(password, this.password); } } }); User.hasMany(Foto,{as: 'fotos', foreignKey: 'userId'}) return Foto; }
我的摄影模特
"use strict"; var sequelize = require('./index'); var bcrypt = require('bcrypt-nodejs'); var User = require('./User'); module.exports = function (sequelize, DataTypes) { var Foto = sequelize.define("Foto", { reports: { type: DataTypes.INTEGER, defaultValue: 0 }, image: { type: DataTypes.STRING, allowNull: false }, date: { type: DataTypes.DATE, allowNull:true }, position: { type: DataTypes.RANGE, allowNull: true } }); Foto.belongsTo(User, {foreignKey: 'userId'}); return Foto; }
您无需在照片模型上声明关联:
Foto.belongsTo(User, {foreignKey: 'userId'});
如果模型之间具有1:N的关系,则只需要引用“ 1”模型的ID(在我们的案例中为User模型),就可以引用“ N”模型的照片。这样做:
User.hasMany(Foto,{as: 'fotos', foreignKey: 'userId'})
将在Foto表上创建一个引用用户表的名称为“ userId”的列。这样,两个模型都可以根据需要进行关联。