(Sequelize+Postgres+NodeJS)Inster FK (userID) 来自另一个表



我正在使用连接到PostgreSQL的Sequelize,由于我想使用同步功能,我想准备有效的模型来在每个环境中创建表。

编辑:

钱包:

'use strict';
module.exports = function(db, DataTypes) {
  var Wallet = db.define('Wallet', {
    id: {
      type: DataTypes.INTEGER,
      autoIncrement: true,
      allowNull: false,
      primaryKey: true
    },
    money: {
      type: DataTypes.INTEGER,
      allowNull: false,
      defaultValue: 0
    }
    createdAt: DataTypes.DATE,
    updatedAt: DataTypes.DATE
  }, {
    tableName: 'wallet',
    classMethods:{
      associate : function( models ) {
        Wallet.belongsTo( models.User,{ foreignKey : 'id_user'});
      }
    }
  });
  return Wallet;
};

用户:

'use strict';
var bcrypt = require('bcrypt-nodejs');
var crypto = require('crypto');
var moment = require('moment');
var models = require('./');

var afterCreateHook = function(user, options, fn) {
  models.Wallet.build({id_user: user.id}).save();
  fn(null, user);
};
module.exports = function(db, DataTypes) {
  var User = db.define('User', {
    id: {
      type: DataTypes.INTEGER,
      autoIncrement: true,
      allowNull: false,
      primaryKey: true
    },
    password: DataTypes.STRING,
    email: {
      type: DataTypes.STRING,
      unique: true,
      allowNull: false,
      isEmail: true
    },
    login: {
      type: DataTypes.STRING,
      unique: true,
      allowNull: false
    }
  }, {
    tableName: 'pl_users',
    instanceMethods: instanceMethods,
    classMethods: {
      associate : function( models ) {
        User.hasOne( models.Wallet);
      }
    },
    hooks: {
      afterCreate: afterCreateHook
    }
  });
  return User;
};

为什么

models.Wallet.build({id_user: user.id}).save();

不工作?帐户正在创建,然后我想创建具有特定user_id的钱包。我什至没有错误...

请帮忙!

你应该从续集文档中检查关系

在您的情况下,您需要定义:

Wallet.belongsTo(User,{foreignKey: 'id_user'});

这将id_user添加到钱包模型中,因此您无需在钱包模型中指定id_user属性。

如果您使用的是续集导入函数,则应在"associate"类方法中添加关系,如下所示:

module.exports = function(db, DataTypes) {
  var Wallet = db.define('Wallet', {
    id: {
      type: DataTypes.INTEGER,
      autoIncrement: true,
      allowNull: false,
      primaryKey: true
    },
    pin: {
      type: DataTypes.INTEGER,
      allowNull: false,
      defaultValue: 0
    },
    money: {
      type: DataTypes.STRING,
      allowNull: false,
      defaultValue: 0
    },
    createdAt: DataTypes.DATE,
    updatedAt: DataTypes.DATE
  }, {
    tableName: 'Wallet',
    classMethods:{
           associate : function( models ) {
                Wallet.belongsTo( models.User,{ foreignKey : 'id_user'});
            }
    }
  });

最新更新