【问题标题】:Is there a bettery way to work with nested(associated) models in Sails JS?有没有更好的方法来处理 Sails JS 中的嵌套(关联)模型?
【发布时间】:2015-12-09 06:26:59
【问题描述】:

我已将 SailsJs 应用程序连接到 Mongodb 数据库。我正在开发一个分析应用程序。这些是我的应用程序中的主要模型:

User Project Report Event

一个用户可以有很多项目,一个项目可以有很多报告,一个报告可以有很多事件。我使用模型属性的collectionmodel 属性创建了这些关系。我的问题是为什么很难找到特定用户的事件?我希望我能做到这一点:

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

但由于只有 projects 是我的 User 模型的属性,因此只有第一个填充有效。与在我的控制器或模型代码中编写令人讨厌且令人困惑的异步循环相比,不是更容易找到深度模型吗?

【问题讨论】:

  • 这是在模型上编写自己的方法函数以实现更复杂行为的时代之一。也可能是使用纯 SQL 的 .query() 的时候了
  • @FrederickStark 你不认为这是一个很简单的行为,水线无法处理吗?我开始认为sailsJS 在这些简单的情况下真的让你失望了,我开始使用它时犯了一个错误。我希望我错了,或者我可以通过在我的项目中进行更改来解决我的问题。你不认为它必须是框架的一部分吗?
  • 是的,这是风帆/水线最终应该能够处理的行为。这就是使用 v1.0 之前的框架的问题所在。在水线回购中提出问题是个好主意。或者更好的是,如果您有时间制定解决方案,可以提出拉取请求

标签: javascript node.js sails.js waterline sails-mongo


【解决方案1】:

目前,sails 没有任何类型的嵌套种群。问题参考:https://github.com/balderdashy/waterline/issues/308

值得一提的是,有一个添加嵌套人口的拉取请求:https://github.com/balderdashy/waterline/pull/1052

Pull 请求目前没有合并,但您可以使用它直接安装一个

npm i Atlantis-Software/waterline#deepPopulate

有了它,您可以执行.populate('projects.reports ...)' 之类的操作。

【讨论】:

    【解决方案2】:

    现在有一个钩子可以让你做到这一点。它正在用Offshore 改变水线。 Offshore 是 Waterline 的扩展分支,具有深度填充、缓存机制。

    sails-hook-orm-offshore

    在目前的路线图中有:

    • 关联标准(向关联添加默认标准)
    • 交易

    【讨论】:

      猜你喜欢
      • 2018-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-15
      • 2018-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多