2013-12-17 125 views
0

我將我的Rails應用程序的JSON api移動到Node.js.我使用Sequelize作爲ORM在我的postgres數據庫中訪問我的數據。Sequelize findOrCreate()不創建對象

然而,當我嘗試使用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選項

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 
    }) 
}) 

任何人可以幫助或點我在正確的方向?

謝謝!

回答

1

你可以試試這個:

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

它的工作原理,但我遇到了現在的其他錯誤:) – Syl

+0

同步力? o.O – jdnichollsc