Как САМОСТОЯТЕЛЬНО ПРИСОЕДИНИТЬСЯ с помощью Sequelize в узле

Я использую sequenceize-cli для миграции и исследовал различные сценарии, но, похоже, нет четкого ответа на вопрос, как самостоятельно присоединиться. Я хочу иметь таблицу соединений под названием «Дружба», которая объединяет пользователей и друзей (которые, по сути, являются просто пользователями).

Точнее, пытаясь понять разницу между «сквозь» и «как» в этой ситуации.

1) Это мой стол дружбы. Запутался на второй ассоциации. Я создал два столбца, один из которых является идентификатором пользователя, а другой — идентификатором друга. Я надеюсь, что эта таблица будет связана с двумя пользователями, по одному в каждой таблице, с одним столбцом, имеющим псевдоним «friendId».

```

'use strict';
module.exports = function(sequelize, DataTypes) {
  var friendship = sequelize.define('friendship', {
    userId: DataTypes.INTEGER,
    friendId: DataTypes.INTEGER
  }, {
    classMethods: {
      associate: function(models) {
        friendship.belongsTo(models.user);
        friendship.belongsTo(models.user { as: "friend" });
      }
    }
  });
  return friendship;
};

```

2) Это моя пользовательская модель. Опять же, конкретно в объекте ассоциаций я не разбираюсь. Цель здесь состоит в том, чтобы иметь возможность вызывать user.friends и отображать все экземпляры друзей этого пользователя. Не уверен, что правильно использую ключевые слова «сквозь» и «как».

```

'use strict';
module.exports = function(sequelize, DataTypes) {
  var user = sequelize.define('user', {
    username: DataTypes.STRING,
    password: DataTypes.STRING,
    email: DataTypes.STRING
  }, {
    classMethods: {
      associate: function(models) {
        user.hasMany(models.friendship);
        user.hasMany(models.user { as: "friends", through: models.friendship });
      }
    }
  });
  return user;
};

```


person Community    schedule 12.09.2016    source источник


Ответы (1)


Существует отношение «многие ко многим», оно должно проходить через belongsToMany ассоциаций, больше никаких отношений не требуется. Нет необходимости даже определять таблицу друзей, сиквелизация создаст таблицу автоматически.

'use strict';
module.exports = function(sequelize, DataTypes) {
      var user = sequelize.define('user', {
        username: DataTypes.STRING,
        password: DataTypes.STRING,
        email: DataTypes.STRING
      }, {
        classMethods: {
          associate: function(models) {
            user.belongsToMany(models.user, {
               as: "friends", 
               through: "friendship", 
               foreignKey: "userId", 
               otherKey: "friendId"
            });
          }
        }
      });
      return user;
};
person Tilekbekov Yrysbek    schedule 13.09.2016
comment
Спасибо, теперь я могу получить доступ к user.getFriends().then(function(friends))........ но он возвращает пустой массив здесь, в моем контроллере дружбы. Вот первые 6 или около того строк этого контроллера. ``` var friendController = { index: function(req, res) { user.findById(3).then(function(user) { user.getFriends().then(function(friends) { console.log(friends); }) }) ``` Консольная регистрация друзей возвращает пустой массив, однако, когда я смотрю на таблицу дружбы, я вижу дружбу, которую я посеял с userId 3 и userId 1.. - person ; 13.09.2016
comment
попробуйте записать SQL-запрос, который выполняется. .getFriends({logging: console.log}) проверка правильности запроса - person Tilekbekov Yrysbek; 14.09.2016