node.js - Sequelize findOrCreate() 不创建对象

标签 node.js postgresql orm sequelize.js

我正在将 Rails 应用程序的 JSON api 移至 Node.js。我正在使用Sequelize作为访问我的 postgres 数据库中的数据的 ORM。

但是,当我尝试使用 findOrCreate() 并且它需要创建一条记录时,发生了一些奇怪的事情:

INSERT INTO "gameweeks" ("id","number","gw_pts","transfers","transfers_malus","team_id","captain_id","vice_captain_id","in_bank","team_value","overall_rank") VALUES (NULL,16,NULL,NULL,NULL,6,NULL,NULL,NULL,NULL,NULL) RETURNING *;
Executing (default): SELECT * FROM "gameweeks" WHERE "gameweeks"."team_id"=12 AND "gameweeks"."number"=16 LIMIT 1;

它似乎尝试创建一个没有任何 id 的记录,因此抛出错误

error: null value in column "id" violates not-null constraint

当不需要创建记录(更新或仅读取数据)时,它可以正常工作。

这是我的代码:

连续选项

sequelize = new Sequelize('dashboard_development', 'dashboard', null, {
  dialect: "postgres",
  port:    5432,
  define: {
    underscored: true,
    timestamps: false
  },
  sync: { force: true }
})

型号

gameweek.js:

module.exports = function(sequelize, DataTypes) {
  return sequelize.define('gameweek', {
    number: DataTypes.INTEGER,
    gw_pts: DataTypes.INTEGER,
    transfers: DataTypes.INTEGER,
    transfers_malus: DataTypes.INTEGER,
    team_id: DataTypes.INTEGER,
    captain_id: DataTypes.INTEGER,
    vice_captain_id: DataTypes.INTEGER,
    in_bank: DataTypes.FLOAT,
    team_value: DataTypes.FLOAT,
    overall_rank: DataTypes.INTEGER
  });
};

其关联:

global.db.Gameweek.belongsTo(global.db.Team)
.hasMany(global.db.Player, {as: "substitutes", joinTableName: "gameweeks_substitutes"})
.hasMany(global.db.Player, {joinTableName: "gameweeks_players"})
.belongsTo(global.db.Player, {as: "captain", foreignKey: "captain_id"})
.belongsTo(global.db.Player, {as: "vice_captain", foreignKey: "vice_captain_id"})

以及我使用 findOrCreate 的代码:

db.Team.find({where: {fpl_id: fplTeamId}}).complete(function (err, team){
    if (err) throw err;
    db.Gameweek.findOrCreate({team_id: team.id, number: gwNumber}).complete(function (err, gameweek, created) {
        if (err) throw err;
        // Do stuff with the returned gameweek
    })
})  

有人可以帮助我或为我指明正确的方向吗?

谢谢!

最佳答案

你能试试这个吗:

sequelize = new Sequelize('dashboard_development', 'dashboard', null, {
  dialect: "postgres",
  port:    5432,
  define: {
    underscored: true,
    timestamps: false
  },
  sync: { force: true },
  omitNull: true
})

关于node.js - Sequelize findOrCreate() 不创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20632497/

相关文章:

c# - 如何使用 NHibernate 将责任模式映射到 SQL

javascript - Mongoose 深度填充 [Object] 的第 2 级结果

javascript - Express 中的路由参数为空

node.js - Mongoose 连接 mLab 时出现连接错误

postgresql - 带有动态列名的 json_agg()

php - Laravel Eloquent ORM - save() 返回未找到列(MySQL 错误)

javascript - ExpressJS 4.2 和 flash 错误(TypeError : Object #<IncomingMessage> has no method 'flash' )

postgresql - Postgres 9.4 0 undefined symbol - PQhostaddr

postgresql - 带有密码盐的 Pure-ftpd 和 Postgreql Auth

java - 无法使用 hibernate 执行 HQL 更新查询