Is there a bettery way to work with nested(associa

2020-03-31 06:45发布

I've connected my SailsJs app to a Mongodb database. I'm working on an analytic application. These are the major models in my application:

User Project Report Event

A user can have many projects, a project can have many reports and a report can have many events. I have created these relations using collection and model properties of my models attributes. My problem is why is it so hard to find events of specific user? I wish I could do this:

User.
  find({id: id}).
  populate('projects').
  populate('reports').
  populate('events').
  then(function (eventsOfMyUser) {
  });

but since only projects is an attribute of my User model only the first populate works. Shouldn't be an easier way to find a deep model rather than writing nasty and confusing async loops in my controller or model code?

2条回答
够拽才男人
2楼-- · 2020-03-31 07:08

At the moment sails doesn't have any kind of nested population. The issue to reference: https://github.com/balderdashy/waterline/issues/308

Worth saying there's a pull request to add nested population: https://github.com/balderdashy/waterline/pull/1052

Pull request isn't merged at the moment but you can use it installing one directly with

npm i Atlantis-Software/waterline#deepPopulate

With it you can do something like .populate('projects.reports ...)'.

查看更多
一纸荒年 Trace。
3楼-- · 2020-03-31 07:31

Right now there is a hook that allows you to do that. It is changing waterline with Offshore. Offshore is extended fork of Waterline with deep populate, cache mechanism.

sails-hook-orm-offshore

In the road map right now there are:

  • Associations Criteria (add default criteria to association)
  • Transactions
查看更多
登录 后发表回答