2016-06-30 7 views
1

Ich verwende sequelize als meine nodejs Web App ORM.
Ich habe 2 Modelle, Offer und Game. Es gibt eine 1: 1-Verbindung zwischen ihnen, und ich überlege, wie ich es umsetzen soll.
Zuerst habe ich versucht mit Offer.belongsTo(Game), so dass die GameId im Offer Modell ist. Wenn ich eine Offer erstelle, möchte ich, dass die Game auch erstellt werden.Erstellen Sie ein Modell mit seiner Zuordnung in Sequelize

ich den Verband festgelegt haben, wie folgt:

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

Damit die GameId niemals null sein. In sequelizedocs wird darauf hingewiesen, dass ich die Game zusammen mit dem Offer wie dies schaffen könnte:

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

Aber ich bin immer:

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

Wie kann ich ein Offer und ein Game schaffen, in 1 Aktion mit der Nicht-Null-Einschränkung?

EDIT:

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

nicht direkt, sondern eher wie nur FYI: http://stackoverflow.com/questions/37892699/create-a-record-and-an-associated-record-in -ein Versuch. – alecxe

+0

Können Sie die Definition von Modellen veröffentlichen? – Shaharyar

+0

@Shaharyar Hinzugefügt die Modelle. – itaied

Antwort

0

Sie haben nichts für Offer Objekt setzen. Sie passieren gerade Game Objekt.

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

Auch Sie haben nur foreignKey zu definieren, während Assoziationen einstellen. Constraint-Definition befindet sich in Modell:

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

Es gibt ein paar Felder zu "Offer", die ich weggelassen habe. Der Name des Fremdschlüssels muss nicht festgelegt werden, da dies der Standardname ist. – itaied

Verwandte Themen