Модель продолжения не сохранит все атрибуты в create ()

#node.js #postgresql #graphql #sequelize.js

#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 атрибут, а все остальные имеют значение null.

РЕДАКТИРОВАТЬ: Я только что понял, что когда я выполняю create, выполняется этот запрос: Executing (default): INSERT INTO "Rooms" ("id","type","createdAt","updatedAt") VALUES (DEFAULT,$1,$2,$3) RETURNING *; . Во вставке есть только столбец type, почему?

Ответ №1:

Я только что понял, что моя модель комнаты была совершенно неправильной, это правильная форма:

 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
}