valtlfelipe / hapi-sequelizejs

A hapi.js plugin to connect with Sequelize ORM
MIT License
62 stars 17 forks source link

Models and Associations - Problem #26

Closed bloodf closed 5 years ago

bloodf commented 5 years ago

Hi, I've got 3 models,

User

module.exports = (sequelize, DataTypes) => {
  const Users = sequelize.define('Users', {
    id: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true },
    name: {
      type: DataTypes.STRING,
      allowNull: false,
    },
    dci: {
      type: DataTypes.INTEGER,
      unique: 'playerIndex',
    },
    email: {
      type: DataTypes.STRING(250),
      unique: 'playerIndex',
    },
  });

  Users.associate = (models) => {
    models.Users.hasMany(models.Players, {
      foreignKey: 'dci',
      targetKey: 'dci',
    });
  };

  return Users;
};

Players

module.exports = (sequelize, DataTypes) => {
  const Players = sequelize.define('Players', {
    playerId: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true },
    firstName: DataTypes.STRING,
    middleName: DataTypes.STRING,
    lastName: DataTypes.STRING,
    dci: {
      type: DataTypes.INTEGER,
      unique: 'playerDciEvent',
    },
    country: DataTypes.STRING(3),
    eventId: {
      type: DataTypes.INTEGER,
      unique: 'playerDciEvent',
    },
  });

  Players.associate = (models) => {
    models.Players.belongsToMany(models.Teams, {
      as: 'Team',
      through: 'TeamsPlayers',
      foreignKey: 'playerDciEvent',
    });

    models.Players.belongsTo(models.Users, {
      foreignKey: 'dci',
      targetKey: 'dci',
    });
  };

  return Players;
};

Teams

module.exports = (sequelize, DataTypes) => {
  const Teams = sequelize.define('Teams', {
    id: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true },
    teamId: {
      type: DataTypes.INTEGER,
      unique: 'teamIdEvent',
    },
    name: DataTypes.STRING,
    status: DataTypes.INTEGER,
    eliminationRound: DataTypes.INTEGER,
    eventId: {
      type: DataTypes.INTEGER,
      unique: 'teamIdEvent',
    },
  });

  Teams.associate = (models) => {
    models.Teams.belongsToMany(models.Players, {
      as: 'Player',
      through: 'TeamsPlayers',
      foreignKey: 'teamIdEvent',
    });
  };

  return Teams;
};

Every time I try to start my node server, It gives an error

/usr/local/opt/node@10/bin/node /Users/heitor/Versionamento/MagicTournamentManager/index.js
Executing (default): SELECT 1+1 AS result
Executing (default): DROP TABLE IF EXISTS "TeamsPlayers" CASCADE;
Executing (default): DROP TABLE IF EXISTS "Teams" CASCADE;
Executing (default): DROP TABLE IF EXISTS "Players" CASCADE;
Executing (default): DROP TABLE IF EXISTS "Users" CASCADE;
Executing (default): DROP TABLE IF EXISTS "Users" CASCADE;
Executing (default): CREATE TABLE IF NOT EXISTS "Users" ("id"  SERIAL , "name" VARCHAR(255) NOT NULL, "dci" INTEGER, "email" VARCHAR(250), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL, UNIQUE ("dci", "email"), PRIMARY KEY ("id"));
Executing (default): SELECT i.relname AS name, ix.indisprimary AS primary, ix.indisunique AS unique, ix.indkey AS indkey, array_agg(a.attnum) as column_indexes, array_agg(a.attname) AS column_names, pg_get_indexdef(ix.indexrelid) AS definition FROM pg_class t, pg_class i, pg_index ix, pg_attribute a WHERE t.oid = ix.indrelid AND i.oid = ix.indexrelid AND a.attrelid = t.oid AND t.relkind = 'r' and t.relname = 'Users' GROUP BY i.relname, ix.indexrelid, ix.indisprimary, ix.indisunique, ix.indkey ORDER BY i.relname;
Executing (default): DROP TABLE IF EXISTS "Players" CASCADE;
Executing (default): CREATE TABLE IF NOT EXISTS "Players" ("playerId"  SERIAL , "firstName" VARCHAR(255), "middleName" VARCHAR(255), "lastName" VARCHAR(255), "dci" INTEGER REFERENCES "Users" ("dci") ON DELETE NO ACTION ON UPDATE CASCADE, "country" VARCHAR(3), "eventId" INTEGER, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL, UNIQUE ("dci", "eventId"), PRIMARY KEY ("playerId"));
{"name":"mtg-event-manager","hostname":"Heitors-MacBook-Pro.local","pid":21816,"level":50,"promise":{},"reason":{"name":"SequelizeDatabaseError","parent":{"name":"error","length":150,"severity":"ERROR","code":"42830","file":"tablecmds.c","line":"8381","routine":"transformFkeyCheckAttrs","sql":"CREATE TABLE IF NOT EXISTS \"Players\" (\"playerId\"  SERIAL , \"firstName\" VARCHAR(255), \"middleName\" VARCHAR(255), \"lastName\" VARCHAR(255), \"dci\" INTEGER REFERENCES \"Users\" (\"dci\") ON DELETE NO ACTION ON UPDATE CASCADE, \"country\" VARCHAR(3), \"eventId\" INTEGER, \"createdAt\" TIMESTAMP WITH TIME ZONE NOT NULL, \"updatedAt\" TIMESTAMP WITH TIME ZONE NOT NULL, UNIQUE (\"dci\", \"eventId\"), PRIMARY KEY (\"playerId\"));"},"original":{"name":"error","length":150,"severity":"ERROR","code":"42830","file":"tablecmds.c","line":"8381","routine":"transformFkeyCheckAttrs","sql":"CREATE TABLE IF NOT EXISTS \"Players\" (\"playerId\"  SERIAL , \"firstName\" VARCHAR(255), \"middleName\" VARCHAR(255), \"lastName\" VARCHAR(255), \"dci\" INTEGER REFERENCES \"Users\" (\"dci\") ON DELETE NO ACTION ON UPDATE CASCADE, \"country\" VARCHAR(3), \"eventId\" INTEGER, \"createdAt\" TIMESTAMP WITH TIME ZONE NOT NULL, \"updatedAt\" TIMESTAMP WITH TIME ZONE NOT NULL, UNIQUE (\"dci\", \"eventId\"), PRIMARY KEY (\"playerId\"));"},"sql":"CREATE TABLE IF NOT EXISTS \"Players\" (\"playerId\"  SERIAL , \"firstName\" VARCHAR(255), \"middleName\" VARCHAR(255), \"lastName\" VARCHAR(255), \"dci\" INTEGER REFERENCES \"Users\" (\"dci\") ON DELETE NO ACTION ON UPDATE CASCADE, \"country\" VARCHAR(3), \"eventId\" INTEGER, \"createdAt\" TIMESTAMP WITH TIME ZONE NOT NULL, \"updatedAt\" TIMESTAMP WITH TIME ZONE NOT NULL, UNIQUE (\"dci\", \"eventId\"), PRIMARY KEY (\"playerId\"));"},"msg":"unhandledRejection","time":"2019-01-18T21:23:35.763Z","v":0}

Process finished with exit code 1
valtlfelipe commented 5 years ago

Hi @bloodf!

Please tell me the version of hapi-sequelizejs and sequelize you are using. Also the database, PostgreSQL? MySQL?