Sequelize.js加入别名关联以及非别名关联

时间:2017-06-12 18:41:08

标签: mysql sql join associations sequelize.js

我有PostsUsers的基本应用程序。我正在尝试确保只向用户提供符合以下条件的帖子:

  1. 他们之前没有见过这篇文章
  2. 他们不是这篇文章的作者
  3. 为此,我有这些联想:

    User.hasMany(Post, {
      foreignKey: 'user_id'
    });
    
    User.belongsToMany(Post, {
      as: {
        singular: 'ViewedPost',
        plural: 'ViewedPosts'
      },
      through: UserPostView,
      foreignKey: 'user_id',
      otherKey: 'post_id'
    });
    
    Post.belongsToMany(User, {
      as: {
        singular: 'ViewUser',
        plural: 'ViewUsers'
      },
      through: UserPostView,
      foreignKey: 'post_id',
      otherKey: 'user_id'
    });
    

    我可以使用单独的查询来满足每个条件,但是,我希望能够通过单个查询返回满足条件的帖子。

    以下是我现在用来获取用户之前没有看过的帖子的查询。如何修改此查询以返回未由用户创作的帖子?

    function fetchFreshPost(user) {
      return user.getViewedPosts({
        attributes: ['id'],
        joinTableAttributes: []
      }).then(function(posts) {
        var postIds = _.map(posts, 'id');
        var query = {
          limit: 1,
          where: {
            id: {
              $notIn: postIds
            }
          }
        };
    
        return Post.findAll(query);
      })
    }
    

    感谢您的时间。

1 个答案:

答案 0 :(得分:0)

在你的where子句中,你可以加上$ ne,比如

var query = {
      limit: 1,
      where: {
        id: {
          $notIn: postIds
        },
       user_id : {$ne : user.id}
      }
    };