#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
}