Sequelize模型不会在create()中保留所有属性

时间:2019-03-31 00:12:48

标签: node.js postgresql graphql sequelize.js

我有一个Room模型:

module.exports = (sequelize, DataTypes) => {
    const Room = sequelize.define(
        'Room',
        {
            type: DataTypes.ENUM('WANT', 'HAVE', 'SWAP')
        },
        {
            building: DataTypes.ENUM('AA', 'BB', 'CC')
        },
        {
            block: DataTypes.STRING
        },
        {
            room: DataTypes.SMALLINT
        }
    )
}

room migrations

module.exports = {
    up: (queryInterface, Sequelize) =>
        queryInterface.createTable('Rooms', {
            id: {..},
            type: {
                type: Sequelize.ENUM,
                values: ['WANT', 'HAVE', 'SWAP'],
                allowNull: false
            },
            building: {
                type: Sequelize.ENUM,
                values: ['AA', 'BB', 'CC']
            },
            block: {
                type: Sequelize.STRING
            },
            room: {
                type: Sequelize.SMALLINT
            }
      ...
}

和一个graphql schema

type Room {
    id: ID!
    type: String!
    building: String
    block: String
    room: Int
}

input RoomInput {
    type: String!
    building: String
    block: String
    room: Int
}

type RootQuery {
    rooms: [Room!]!
}

type RootMutation {
    createRoom(roomInput: RoomInput): Room!
}

但是,当我尝试像这样创建房间模型时:

return Room.create({
    type: args.roomInput.type,
    building: args.roomInput.building,
    block: args.roomInput.block, // not even when I do block: 'block'
    room: args.roomInput.room
})
.then(room => room)
.catch(...)

由于某些原因,只有type属性可以保留,而其他所有属性都为空。

编辑:我刚刚意识到在执行创建时,该查询将被执行:Executing (default): INSERT INTO "Rooms" ("id","type","createdAt","updatedAt") VALUES (DEFAULT,$1,$2,$3) RETURNING *;。插入中只有类型列,为什么?

1 个答案:

答案 0 :(得分:0)

我刚刚意识到,我的会议室模型完全错误,这是正确的形式:

module.exports = (sequelize, DataTypes) => {
    const Room = sequelize.define('Room', {
        type: DataTypes.ENUM('WANT', 'HAVE', 'SWAP'),
        building: DataTypes.ENUM('AA', 'BB', 'CC'),
        block: DataTypes.STRING,
        room: DataTypes.SMALLINT
    })
    return Room
}