Как получить несколько элементов из модели ownToMany в sequelize? - PullRequest
0 голосов
/ 18 октября 2019

У меня есть 3 таблицы: User, Ship и UserShips.
Последняя - это таблица соединений. Он имеет внешний ключ для пользователя и один для отправки. Пользователь может иметь несколько кораблей, а также более одного корабля.

Я пытаюсь получить с него данные, но у меня ничего не получается.

IЯ определил модель для всех 3.

\\ In another file: the user_ships module
module.exports = (sequelize, type) => {
    return sequelize.define('user_ships', {
        id: {
            type: type.INTEGER,
            primaryKey: true,
            autoIncrement: true } });
};

\\ In my main sequelize intialization file
const User = UserModel(sequelize, Sequelize);
const Ship = ShipModel(sequelize, Sequelize);
const UserShips = UserShipsModel(sequelize, Sequelize);

Ship.belongsToMany(User, { through: { model: UserShips, unique: false } });
User.belongsToMany(Ship, { through: { model: UserShips, unique: false } });

Я использую unique: false для предотвращения ограничения уникальности. При просмотре БД это работает нормально. Я могу добавить несколько кораблей для пользователя в этой таблице.

Но при получении информации мне не удается: - получить все корабли для определенного пользователя - извлечь все корабли для всех пользователей, включаяповторяющиеся записи о кораблях, которые я пытался получить через UserModel, а также через модель UserShips.

// I would expect to retrieve 1 user and all his ships (incl. duplicates)
User.findByPk(msg.author.id, {
  order: [ [ Ship, 'price', 'DESC'] ],
  include: [ {
  model: Ship } ] })
  .then(user => {
     // do things with user and it's ships
  })
  .catch(error => `Could not find any ships: ${error}.`);

// Same, fetch 1 user with all his ships.
UserShips.findAll({ where: { userDiscordid: msg.author.id },
  order: [ [ Ship, 'price', 'DESC'] ],
  include: [ { model: Ship } ] })
  .then(userShips => {
     console.log(userShips);
  });

Что не так с тем, как я пытаюсь запрашивать / получать данные?

...