SailsJS通过关联:如何创建关联?

时间:2016-06-12 13:32:50

标签: postgresql sails.js waterline

我在Mac OSX(10.10.5)上使用 Sails 0.12.3 postgresql 9.3.4 ,我正在尝试实现{{3 }}

我已经设置了两个模型,第三个作为连接表。当我尝试通过创建关系进行测试时,我得到了这个错误:

 Uncaught TypeError: Cannot read property 'via' of undefined

这是我的测试 mocha / chai ) - 我认为错误实际上就是这种创建关联的方法(因为如果我为连接创建模型作为一个单独的电话,它起作用:

  describe('with orgs', function() {
    beforeEach(function(done) {
      var testEmail = 'sue@test.com';
      var orgName = 'Awesome Org';
      Org.create({name:orgName})
      .then(function(org) {
        return User.create({username:testEmail, orgs:[org]})
      })
      .then(function(user) {
        done()
      })
      .catch(done);
    });
    it('populates empty list of orgs', function(done) {
      console.log('about to call find');
      User.find().populate('orgs')
      .then(function(users) {
        console.log('users', users);
        var user = users[0]
        assert.isNotNull(user.orgs);
        assert.equal(user.orgs.length, 1);
        done();
      })
      .catch(done);
    });
  });

以下是我的模特:

user.js的:

module.exports = {
  attributes: {
    username : { type: 'email' },
    orgs: {
      collection: 'org',
      via: 'user',
      through: 'orgmembership'
    }
  }
};

Org.js:

module.exports = {
  attributes: {
    name : 'string',
    users: {
      collection: 'user',
      via: 'org',
      through: 'orgmembership'
    }
  },
};

OrgMembership.js:

module.exports = {
  tableName: 'org_membership',
  attributes: {
    user: { model: 'User', columnName: 'user_id', foreignKey: true},
    org: { model: 'Org',  columnName: 'org_id', foreignKey: true}
  }
};

我已将整个项目发布在through association

我发现这个github,似乎做了同样的事情,并试图遵循相同的模式,但它不适合我。

我很感激任何指针或建议。谢谢!

1 个答案:

答案 0 :(得分:-1)

Users.js应该引用Org.js中“via”定义中的“users”,这同样适用于OrgMembership.js

module.exports = {
  attributes: {
    username : { type: 'email' },
    orgs: {
      collection: 'org',
      via: 'users',
      through: 'orgmembership'
    }
  }
};