Итак, у меня есть простая настройка с использованием трех моделей: пользователи / сообщения / чаты.Я связался с моделью чата, чтобы чаты принадлежали многим сообщениям, а сообщения принадлежали чату.Когда я пытаюсь выполнить Models.Messages.create ({args.message}) в распознавателе, он выдает ошибку:
Выполнение (по умолчанию): СОЗДАТЬ РАСШИРЕНИЕ, ЕСЛИ НЕ СУЩЕСТВУЕТ "uuid-ossp";sequelize.js: 1091 Выполнение (по умолчанию): INSERT INTO "Messages"> ("messageId", "message", "creationAt", "updatedAt") ЗНАЧЕНИЯ> (uuid_generate_v4 (), 'Ricks is greats', '2019-02-04 21: 40: 01.438> +00: 00 ',' 2019-02-04 21: 40: 01.438 +00: 00 ') ВОЗВРАЩЕНИЕ *;sequelize.js: 1091 SequelizeForeignKeyConstraintError: вставка или обновление таблицы> «Сообщения» нарушает ограничение внешнего ключа «Messages_messageId_fkey»
Поэтому я пытаюсь создать простое приложение для чата, в котором я использую классы es6Эксперимент, чтобы увидеть, могу ли я получить продолжение работы
Это модель сообщений:
'use strict';
import Sequelize, { Model } from 'sequelize';
import Models from './';
module.exports = class Message extends Model {
static tableName = 'Message';
freezeTableName = true;
sync = true;
static init(sequelize) {
return super.init({
messageId:{
allowNull: true,
primaryKey: true,
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.literal('uuid_generate_v4()'),
},
message: Sequelize.STRING,
chat_id: {
type: Sequelize.STRING,
allowNull: true
}
}, { sequelize })
};
static associate(models) {
this.belongsTo(models.Chats, { as: 'Chat', constraints: false});
}
}
Это модель чата:
'use strict';
import Sequelize, { Model } from 'sequelize';
import Models from './';
module.exports = class Chat extends Model {
static tableName = 'Chat';
freezeTableName = true;
sync = true;
static init(sequelize) {
return super.init({
chatId:{
allowNull: true,
primaryKey: true,
type: Sequelize.DataTypes.UUID,
defaultValue: Sequelize.literal('uuid_generate_v4()'),
},
name: Sequelize.STRING
}, { sequelize })
};
static associate(models) {
this.belongsToMany(models.Users, { as: 'Users', constraints: false,
through: 'user_chat'});
this.belongsToMany(models.Messages, { targetKey:'chat_id' ,
constraints: false, through: 'chat_message'});
}
}
Это чатыresolver из настройки graphql:
import { resolver } from 'graphql-sequelize';
import {Models, sequelize} from '../../models';
exports.resolver = {
Mutation: {
addChat: (parent, args) => {
console.log(Models);
const chat = Models.Chats.create({
name: args.name,
user: args.friendId
}).catch((err)=>{
Promise.reject(err);
})
return chat;
},
addMessage: async (parent, args) => {
try {
// update messages
return Models.Chats.findOne({where: {chatId: args.chatId}})
.then(function(chat) {
console.log(chat);
console.log(typeof chat);
return Models.Messages.create({message: args.message})
.then((message) => {
console.log(message);
return chat.addMessage(message.messageId);
})
})
} catch (error) {
throw new Error('Error: ' + error);
}
}
},
Query: {
getMessages: (parent, args) => {
return Models.Messages.findAll({
where: {chatId: args.chatId},
include: [ {model: Models.Chats, as: 'Chat'}]
})
},
getChat: resolver(async () => { return await Models.Chat})
}
}
Ошибка происходит в addMessage resolver при выполнении Models.Messages.create ({message: args.message});
Я перепробовал все виды:транзакции для принудительной фиксации, определяющие внешний ключ на целевой модели.Я думаю, что у меня что-то не так, может кто-нибудь помочь?это раздражало меня уже несколько дней.Если вам нужна дополнительная информация, пожалуйста, спросите.Спасибо.
Ожидаемый результат заключается в том, что когда я делаю .create на модели, он не выдает ошибку, когда я пытаюсь создать экземпляр этой Модели.Фактический результат заключается в том, что он выдает ошибку ограничения внешнего ключа.