我有三个模型我试图定义它们之间的关系。
模型: 用户 付款 债务人
我是否需要在源和目标中定义关系?即
User.hasMany(Payment, {as: 'Payments'})
以及
Payment.belongsTo(User)
或者我可以在一个模型中定义它吗?
我试图在两者中定义时似乎都会出错。我导入的模型是undefined
,因此当我尝试将其传递给" belongsTo()"或" hasMany()"函数我收到错误called with something that's not an instance of Sequelize.Model
当我只在一个模型中包含它时,它不会正确创建关系。
我的模型如下:
付款方式:
import { sequelize } from '../config';
import Sequelize from 'sequelize';
import User from './User';
const Payment = sequelize.define('payment', {
amount: {
type: Sequelize.FLOAT
},
reference: {
type: Sequelize.STRING
},
user_id: {
type: Sequelize.INTEGER
}
});
Payment.belongsTo(User)
export default Payment;
用户模型:
import { sequelize } from '../config';
import Sequelize from 'sequelize';
import Payment from './Payment';
const User = sequelize.define('user', {
email: {
type: Sequelize.STRING
},
username: {
type: Sequelize.STRING
},
firstName: {
type: Sequelize.STRING
},
lastName: {
type: Sequelize.STRING
},
facebookID: {
type: Sequelize.STRING
}
});
User.hasMany(Payment, {as: 'Payments'})
export default User;
//编辑
当我尝试使用付款创建新用户时,收到错误payment is not associated to user!
exports.create = (req, res) => {
User.create({
email: 'test3@gmail.com',
firstName: "Test",
lastName: "Test",
username: 'fnord',
payment: [
{ amount: 10.00},
]
}, {
include: [ Payment ]
})
}
答案 0 :(得分:1)
之所以发生这种情况,是因为在payment
中您需要User
模型,反之亦然,在user
中您需要Payment
(循环依赖)。为了避免这种情况,你必须在同一个文件中声明两个模型,或者你可以按照Sequelize推荐的方式
module.exports = (sequelize, DataTypes) => {
return sequelize.define('modelName', {
// attributes
}, {
// additional options, like classMethods in which you could create the association
classMethods: {
associate: function(models) {
this.belongsTo(models.Model);
this.hasMany(models.Model);
}
}
});
}
为了实现它,您必须使用sequelize-cli
模块。如果你安装它,你可以使用sequelize init
命令生成一个文件,将所有模型注册到sequelize(所有这些模型最初都在一个位置,但你可以通过修改自动生成的文件来改变它)。 / p>
在这种情况下,sequelize迭代每个模型,注册它(使用sequelize.import()
方法)并调用associate
函数,该函数创建模型之间的关系。这样可以防止你提到的情况。