Sequlize协会的麻烦,

时间:2017-09-26 21:34:28

标签: node.js sequelize.js

在设置与sequ​​elize库的关联时遇到了一些麻烦。继续获取SequelizeEagerLoadingError:客户端与许可证无关!

这是我的两个模特。



'use strict';

module.exports = (sequelize, DataTypes) => {
  const License = sequelize.define('License', {
    id: {
      type: DataTypes.UUID,
      defaultValue: DataTypes.UUIDV4,
      primaryKey: true,
      validate: { isUUID: 4 }
    },
    client_id: {
      type: DataTypes.UUID,
      validate: { isUUID: 4 }
    }
  }, {
    classMethods: {
      associate: function (models) {
        License.belongsTo(models.Client, { foriegnKey: 'client_id' });
      }
    }
  });
  return License;
};






'use strict';

module.exports = (sequelize, DataTypes) => {
  const Client = sequelize.define('Client', {
    id: {
      type: DataTypes.UUID,
      defaultValue: DataTypes.UUIDV4,
      primaryKey: true
    },
    name: { type: DataTypes.STRING }
  }, {
    classMethods: {
      associate: function (models) {
        Client.hasOne(models.License);
        Client.hasMany(models.Event);
        Client.hasMany(models.Clips);
      }
    }
  });
  return Client;
};




这是我设置的控制器,我知道模型工作正常,因为我使用了findbyID()函数进行测试。



'use strict';

const db = require('../models/index.js');

class Controller {
    constructor(router) {
        router.get('/:id', (req, res, next) => {

            // db.License.findById(req.params.id).then(function(license) {
            //     res.status(200).json(license);
            // }, function(err) {
            //     res.status(404).json({
            //         error: 'License does not exist!'
            //     });
            // });
            db.License.findAll({
                include: [{ model: db.Client }]
            })
            .then(function(license) {
                res.status(200).json(license);
            }, function(err) {
                console.log(err);
                res.status(404).json({
                    error: 'License does not exist!'
                });
            });
        });
    }
}

module.exports = router => new Controller(router);




帮助会很棒,感觉超级失落。 sequelize.sync()正在运行,并且不会抛出任何错误。试图弄清楚我是否有命名问题可能是因为某些事情需要资本化或没有资本化而且不是。

1 个答案:

答案 0 :(得分:1)

我也在Sequelize v4 +中遇到这种错误。我通过一些小改动来修改我的模型,希望这对你有用。 像这样编写许可证模型



'use strict';

module.exports = function (sequelize, DataTypes) {
    const License = sequelize.define('License', {
        id: {
            type: DataTypes.UUID,
            defaultValue: DataTypes.UUIDV4,
            primaryKey: true,
            validate: {isUUID: 4}
        },
        client_id: {
            type: DataTypes.UUID,
            validate: {isUUID: 4}
        }
    });
    License.associate = function (models) {
        License.belongsTo(models.Client, {foriegnKey: 'client_id'});
    };
    return License;
};




相同修改您的客户端,



'use strict';

module.exports = function (sequelize, DataTypes) {
    const Client = sequelize.define('Client', {
        id: {
            type: DataTypes.UUID,
            defaultValue: DataTypes.UUIDV4,
            primaryKey: true
        },
        name: {type: DataTypes.STRING}
    });
    Client.associate = function (models) {
        Client.hasOne(models.License);
        Client.hasMany(models.Event);
        Client.hasMany(models.Clips);
    };

    return Client;
};