mysql - 如何将来自 json 文件的关联包含在 sequelize-fixtures 中?

标签 mysql json node.js sequelize.js fixtures

大家好,

我对 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/

相关文章:

PHP/MySQL语法插入多个表(多对多结构)

json - 违反mapKeysMonotonic前提条件

node.js - 测试一个使用 promises 的函数

node.js - Node : error when installing hiredis package

node.js - 访问 Travis 安全环境变量 Node.js/PostgreSQL

mysql - 大量 CSV 到 MySQL 的导入问题

mysql - 查询以选择自上次成功以来的所有行

php - 在一个长词中查找多个词并按相关性对结果进行排序

json - Newtonsoft JSON - 如何反序列化自定义集合?

javascript - AngularJS ex.com/forum?id=1 到 ex.com/#/forum?id=1