大家好,
我对 sequelizejs 很陌生,只是想尝试使用它。我在使用 sequelize-fixtures 创建示例数据集时遇到问题。
我的模型是这样创建的:
User.js (没有 beforeCreate、beforeUpdate 钩子(Hook))
'use strict';
module.exports = function (sequelize, DataTypes) {
var User = sequelize.define('User', {
email: {type: DataTypes.STRING, allowNull: false},
password: {type: DataTypes.STRING, allowNull: false},
active: {type: DataTypes.BOOLEAN, default: false}
});
return User;
};
角色.js
'use strict';
module.exports = function (sequelize, DataTypes) {
var Role = sequelize.define('Role', {
title: {type: DataTypes.STRING, allowNull: false},
description: {type: DataTypes.STRING, allowNull: true},
code: {type: DataTypes.STRING, allowNull: false}
});
return Role;
};
将模型导入模型对象后,我创建了它们之间的关联:
models.User.belongsToMany(models.Role, {through: 'UserRole', constraints: true});
models.Role.belongsToMany(models.User, {through: 'UserRole', constraints: true});
而且我已经按照文档所述从与结构一起使用的 json 文件中加载了示例数据,但是由 sequelize 自动创建的 userroles 表仍然是空的。
fixture json 文件包含以下内容:
[
{
"model": "Role",
"data": {
"title": "Administrator",
"description": "Administrator users",
"code": "RIGHT_ADMIN"
}
},
{
"model": "Role",
"data": {
"title": "Manager",
"description": "Manager users",
"code": "RIGHT_MANAGEMENT"
}
},
{
"model": "User",
"keys": [
"id"
],
"data": {
"id": 0,
"email": "admin@app.io",
"password": "admin",
"active": true
},
"roles":[1,2]
}
]
并且在数据库同步后将调用 fixture 加载: force:true,仅出于开发原因留在其中
db.sync({force: true}).then(function () {
//load fixtures
SequelizeFixtures.loadFile('fixtures/*.json', models).then(function () {
console.dir("DEV DATA CREATED SUCCESSFULLY");
});
});
我的问题是在运行 fixture 后,由 User 和 Role 模型关联创建的 userroles 表始终为空。
最佳答案
弄清楚了东西
事实证明,sequelize fixture 文档说可以在 json 文件中给定模型记录的数据之外定义 many2many 关系值。
解决方案是在模型的 $Model.associations 对象中找到关系关联键,并将其用作数据对象中的键。
简而言之:
这个
models.User.belongsToMany(models.Role, {through: 'UserRole', constraints: true});
models.Role.belongsToMany(models.User, {through: 'UserRole', constraints: true});
创建了用户模型的关联“角色”和角色模型的“用户”。
现在根据这个 json 记录对象应该是这样的:
{
"model": "User",
"keys": [
"id"
],
"data": {
"id": 0,
"email": "admin@app.io",
"password": "admin",
"active": true,
"Roles":[1,2]
}
}
Here is a gist I'have made to show how to use it.
希望这对 sequelize 和 sequelize-fixtures 的其他用户有帮助
关于mysql - 如何将来自 json 文件的关联包含在 sequelize-fixtures 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33451937/