hasMany调用的不是Sequelize.Model的实例

大家可以看到我的问题与标题描述有关,我创建了一个用户模型和一个续集的照片模型,基本上一个用户可以拍摄许多照片,但是每张照片只能与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”的列。这样,两个模型都可以根据需要进行关联。

以上是 hasMany调用的不是Sequelize.Model的实例 的全部内容, 来源链接: utcz.com/qa/403806.html

回到顶部