2016-06-30 42 views
1

我使用sequelize作爲我的nodejs網絡應用程序ORM。我有2個型號,OfferGame。它們之間有1:1的關聯,我正在考慮如何實現它。
首先,我嘗試使用Offer.belongsTo(Game),以便GameId駐留在Offer模型中。當我創建一個Offer時,我希望也創建Game創建模型及其關聯中的續集

我已經設置了關聯如下:

Offer.belongsTo(models.Game, { 
     foreignKey: { 
     allowNull: false 
     } 
    }) 

這樣的GameId永遠不會爲空。在sequelizedocs,值得注意的是,我可以用Offer這樣共創Game

models.Offer.create({Game:{"name":"The Last of Us", "platform":"PC"}},{include:[models.Game]}); 

但我發現了:

Unhandled rejection SequelizeDatabaseError: null value in column "GameId" violates not-null constraint 

如何創建一個Offer並在Game使用非空約束的1動作?

編輯:

module.exports = function(sequelize, DataTypes) { 
    var Game = sequelize.define("Game", { 
    name: { 
     type: DataTypes.STRING, 
     allowNull: false 
    }, 
    platform: { 
     type: DataTypes.ENUM('PC', 'PS4', 'PS3', 'XB1', 'XB360'), 
     allowNull: false 
    }, 
    cover: { 
     type: DataTypes.STRING, 
     allowNull: false, 
     validate: { 
     notEmpty: true 
     } 
    } 
    }, { 
    updatedAt: false, 
    createdAt: false 
    }); 

    return Game; 
}; 

module.exports = function(sequelize, DataTypes) { 
    var Offer = sequelize.define("Offer", { 
    price: { 
     type: DataTypes.INTEGER, 
     validate: { 
     max: 999, 
     min: 0 
     } 
    }, 
    exchange: { 
     type: DataTypes.BOOLEAN, 
     defaultValue: true, 
     allowNull: false 
    } 
    }, { 
    updatedAt: false, 
    classMethods: { 
     associate: function(models) { 
     Offer.belongsTo(models.Game, { 
      foreignKey: { 
      allowNull: false 
      } 
     }); 
     } 
    } 
    }); 

    return Offer; 
}; 
+0

沒有直接關係,但是,更像只是FYI:http://stackoverflow.com/questions/37892699/create-a-record-and-an-associated-record-in - 酮去。 – alecxe

+0

你可以發佈模型的定義嗎? – Shaharyar

+0

@Shaharyar添加了模型。 – itaied

回答

0

你沒有把任何東西Offer對象。你只是通過Game對象。

models.Offer.create({ 
    //set fields for 'Offer' 
    Game:{"name":"The Last of Us", "platform":"PC"} 
    }, 
    {include:[models.Game]} 
); 

此外,您只需在設置關聯時定義foreignKey即可。約束定義駐留在模型:

Offer.belongsTo(models.Game, { 
     foreignKey: 'GameId' 
    }); 
+0

有幾個領域'提供'我沒有省略。不需要設置外鍵的名稱,因爲它是默認名稱。 – itaied

相關問題