Создайте экземпляр в отношении секвелирования принадлежащих многим - PullRequest
0 голосов
/ 17 сентября 2018

У меня проблемы с пониманием документации, относящейся к секвелированию, касающейся отношений между людьми. Я смог правильно настроить его в самой БД, но теперь, когда я хочу выполнить основную операцию CRUD, я совершенно потерян.

Так вот в чем дело: у меня есть пользователи и чаты. Когда пользователь создает чат, я хочу, чтобы он был как владельцем комнаты, так и участником.

Проблема в том ... Я не могу понять, как добавить этого пользователя к участнику. В отношении базы данных есть таблица chatroom_user, которая содержит идентификаторы пользователей и идентификаторы чатов. Из того, что я понял из документации sequelize, я должен создать функцию addXXXXX в моей модели, добавить вызов в функции распознавателя с требуемыми аргументами ... но это не работает ...

вот мой код

модель в чате:

export default (sequelize, Datatypes) => {
    const Chatroom = sequelize.define('chatroom', {
        publicRoom: {
            type: Datatypes.BOOLEAN,
            allowNull: false
        },
    });

    Chatroom.associate = (models) => {
        Chatroom.belongsTo(models.user, {
            foreignKey: {
                name: 'owner',
                allowNull: false
            }
        });
        Chatroom.belongsToMany(models.user, {
            through: 'user_chatroom',
            foreignKey: {
                name: 'chatroom',
                allowNull: false
            },
            onDelete: 'CASCADE'
        });
        Chatroom.addUsers(models.user);
    };

распознаватели чатов:

export default {
    Query: {
        // some queries here...
    },
    Mutation: {
        createChatroom: async (parent, args, {models, user}, info) => {
            try {
                return await models.chatroom.create({owner: user.id})
                    .then(models.chatroom.addUsers(user.id));
            } catch (err) {
                console.log(err);
            }
        },

    }
};

Так что да, я знаю, что это определенно не способ сделать это, но я искал много учебников и не нашел рабочих решений ...: (

1 Ответ

0 голосов
/ 17 сентября 2018

Я могу предложить вам следующее, удалить владельца из чата и переместить владельца в таблицу соединений, в вашем случае, в таблицу chatroom_user.

export default (sequelize, DataTypes) => {
  const Chatroom = sequelize.define('chatroom', {
    name: DataTypes.STRING,
    publicRoom: {
        type: Datatypes.BOOLEAN,
        allowNull: false
    },
  });

  Chatroom.associate = (models) => {
    Chatroom.belongsToMany(models.User, {
      through: 'user_chatroom',
      foreignKey: {
        name: 'userId',
        field: 'user_id',
      },
    });
  };
  return Chatroom;
};

затем в вашей таблице UserChatroom

 export default (sequelize, DataTypes) => {
  const UserChatroom = sequelize.define('user_chatroom', {
    owner: {
      type: DataTypes.BOOLEAN,
      defaultValues: false,
    },
  });

  return UserChatroom;
};

и затем в вашем резольвере при создании ChatRoom обновите объединительную таблицу user_chatroom с дополнительным столбцом owner значением true, если пользователь является владельцем чата, или false, если его нет

что-то вроде этого

id| owner | user_id|chatroom_id|
1 | false | 1      | 1         |
2 | true  | 2      | 1         |
3 | false | 3      | 1         |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...