(Sequelize + Postgres + NodeJS)从另一个表

时间:2016-01-27 14:03:47

标签: node.js postgresql sequelize.js

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

修改

钱包:

'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的钱包。我甚至没有错误......

请帮忙!

1 个答案:

答案 0 :(得分:0)

您应该从sequelize docs

中查看relations

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

int i = 0;
int j = testList.size() - 1;

while (i < j) {
    int temp = testList.get(i);
    testList.set(i, testList.get(j));
    testList.set(j, temp);
    i++;
    j--;
}

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

如果您使用的是sequelize导入功能,则应在&#34;关联&#34;中添加关系。像这样的类方法:

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