Мутация GraphQL не позволяет мне добавлять данные в таблицу mysql с ошибкой ненулевого нарушения - PullRequest
0 голосов
/ 15 февраля 2020

Я использую GraphQL, Sequelize и MySql для добавления данных в таблицу клиентов. В мутации GraphQl я делаю следующее:

const db = require("./models");

const Mutation = new GraphQLObjectType({
    name: "Mutation",
    fields: {
        addClient: {
            type: ClientType,
            args: {
                lastName: { type: new GraphQLNonNull(GraphQLString) },
                firstName: { type: new GraphQLNonNull(GraphQLString) },
                primaryPhoneNumber: { type: new GraphQLNonNull(GraphQLString) },
                cellphone: { type: GraphQLString },
                workPhone: { type: GraphQLString },
                email: { type: GraphQLString },
                UserId: { type: new GraphQLNonNull(GraphQLString) }
            },
            resolve(parentValue, args) {
                let newClient = new db.Client({
                    lastName: args.lastName,
                    firstName: args.firstName,
                    primaryPhoneNumber: args.primaryPhoneNumber,
                    cellphone: args.cellphone,
                    workPhone: args.workPhone,
                    email: args.email,
                    UserId: args.UserId
                });
                console.log(newClient);
                return db.Client.create(newClient);
            }
        }
    }
});

Но я получаю эту ошибку обратно при тестировании на GraphiQL:

{
  "errors": [
    {
      "message": "notNull Violation: Client.lastName cannot be null,\nnotNull Violation: 
 Client.firstName cannot be null",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": [
        "addClient"
      ]
    }
  ],
  "data": {
    "addClient": null
  }
}

Я считаю, что эта ошибка возникает из-за sequelize, как в моем Модель Я определяю некоторые ненулевые поля:

module.exports = function(sequelize, DataTypes) {
    var Client = sequelize.define(
        "Client",
        {
            lastName: {
                type: DataTypes.TEXT,
                allowNull: false,
                len: [1]
            },
            firstName: {
                type: DataTypes.TEXT,
                allowNull: false,
                len: [1]
            },
            primaryPhoneNumber: {
                type: DataTypes.TEXT,
                allowNull: true,
                len: [1]
            },
            cellphone: {
                type: DataTypes.TEXT,
                allowNull: true,
                len: [1]
            },
            workPhone: {
                type: DataTypes.TEXT,
                allowNull: true,
                len: [1]
            },
            email: {
                type: DataTypes.TEXT,
                allowNull: true,
                len: [1]
            }
        },

        {
            timestamps: false
        }
    );

    Client.associate = function(models) {
        // Associating Clients with Pets
        // When a Client is deleted, also delete any associated Pets
        Client.belongsTo(models.User);
        Client.hasMany(models.Pet, {
            onDelete: "cascade"
        });
    };

    return Client;
};

Это мой запрос от внешнего интерфейса:

mutation {
  addClient(lastName: "ali", firstName: "muhamed",  primaryPhoneNumber: 
"00990099009", email: "jalimaña@email.com", UserId: "14fb9610-4766-11ea-9a4e- 
e130bc08c2aa") {
    lastName,
    firstName
  }
}

Кто-нибудь знает, почему это происходит? Любая помощь будет высоко оценена.

1 Ответ

1 голос
/ 15 февраля 2020

Model.create принимает простой объект со значениями, с которыми должен быть инициализирован экземпляр Model. Вы не должны передавать ему существующий экземпляр Model. Вместо этого просто вызовите метод save в экземпляре.

const instance = new SomeModel({ firstName: 'Bob' })
await instance.save()

Это эквивалентно

const instance = SomeModel.build({ firstName: 'Bob' })
await instance.save()

и

await SomeModel.create({ firstName: 'Bob' })
...