2016-06-30 24 views
1

sequelizeを私のnodejsウェブアプリケーションORMとして使用しています。
私にはOfferGameの2モデルがあります。それらの間には1対1の関係があり、実装方法を検討しています。
最初に、Offer.belongsTo(Game)を使用して試して、がOfferモデルに存在するようにしました。 Offerを作成するときには、Gameも作成します。続編の関連付けを含むモデルを作成

次のように私は関連を設定している:

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

GameIdがnullになることはありませんように。 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 

にはどうすればいいでOfferGameを作成することができますNOT NULL制約を使った1アクション?

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

直接関連していない、しかし:制約の定義は、モデル内に存在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を定義するだけで済みます。ちょうどFYI以上のように、

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

私は省略した「オファー」にはいくつかのフィールドがあります。外部キーの名前はデフォルト名であるため、設定する必要はありません。 – itaied

関連する問題