Sequelize 与 PostgreSQL 的关系 (generator-sql-fullstack)

Sequelize relations with PostgreSQL (generator-sql-fullstack)

正在尝试使用 sequelize (3.3.2) 在我的 PostgreSQL 数据库中创建关系。我正在使用 grunt(在 serve 命令之后没有错误,我正在使用 generator-sql-fullstack)。创建了数据库表,但没有关系也没有外键。这是我的模型:

user.model.js

'use strict';

module.exports = function(sequelize, DataTypes) {
var User = sequelize.define('user', {

user_id: {
  type: DataTypes.STRING//,
//  primaryKey: true
},

username: {
  type: DataTypes.STRING,
  unique: true,
  alowNull: false
},

password: {
  type: DataTypes.STRING,
  alowNull: false
},

user_role: {
  type: DataTypes.STRING,

}
 }, {
    classMethods: {
  associate: function(models) {
    User.hasMany(models.cart)
  }
}
});

User
.sync({
  force: true
})
.then(function() {
  User.create({
    user_id: 1,
        username: 'test_username',
        password: 'some_pass'
      });

    });

  return User;
};

cart.model.js

'use strict';

module.exports = function(sequelize, DataTypes) {
  var Cart = sequelize.define('cart', {
    cart_id: {
      type: DataTypes.STRING,
      primaryKey: true
    }
  });

  Cart
    .sync({force: true})
    .then(function (){
      Cart.create({
        cart_id: 12
      });

    });

  return Cart;
};

在 grunt 服务命令后从 pgadmin 登录:

-- Table: public.carts

-- DROP TABLE public.carts;

 CREATE TABLE public.carts
 (
  cart_id character varying(255) NOT NULL,
  "createdAt" timestamp with time zone NOT NULL,
  "updatedAt" timestamp with time zone NOT NULL,
  CONSTRAINT carts_pkey PRIMARY KEY (cart_id)
)
WITH (
   OIDS=FALSE
 );
 ALTER TABLE public.carts
  OWNER TO postgres;


-- Table: public.users

-- DROP TABLE public.users;

CREATE TABLE public.users
(
  id integer NOT NULL DEFAULT nextval('users_id_seq'::regclass),
  user_id character varying(255),
  username character varying(255),
  password character varying(255),
  user_role character varying(255),
  "createdAt" timestamp with time zone NOT NULL,
  "updatedAt" timestamp with time zone NOT NULL,
  CONSTRAINT users_pkey PRIMARY KEY (id),
  CONSTRAINT users_username_key UNIQUE (username)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE public.users
  OWNER TO postgres;

解决方案是从 class 方法中删除关联定义并在模型中创建函数 class:

user.js

User.associate = function(models) {
   User.hasMany(models.cart)
}

index.js

Object.keys(db).forEach(modelName => {
  if (db[modelName].associate) {
   db[modelName].associate(db);
  }
});