【问题标题】:How to perform SQL Joins and Relations in Sails.js and Waterline?如何在 Sails.js 和 Waterline 中执行 SQL 连接和关系?
【发布时间】:2013-07-15 00:23:04
【问题描述】:

谁能指导我如何设置关系模式并在sails.js 中执行连接?

【问题讨论】:

标签: node.js orm sails.js waterline


【解决方案1】:

Waterline 正式支持关联

概述

From the docs:

借助 Sails 和 Waterline,您可以跨多个数据存储关联模型。这意味着即使您的用户住在 PostgreSQL 中并且他们的照片位于 MongoDB 中,您也可以与数据进行交互,就好像他们一起住在同一个数据库中一样。您还可以使用相同的适配器建立跨越不同连接(即数据存储/数据库)的关联。例如,如果您的应用需要访问/更新存储在公司数据中心的 MySQL 数据库中的旧配方数据,而且还需要从云中全新的 MySQL 数据库存储/检索成分数据,这将派上用场。

支持的关联类型

计划的关联类型


原帖

我是 Waterline 的作者,它是 Sails 中使用的 ORM。水线是品牌 新的,我们一直在添加功能。目前我们没有 支持协会,但它是路线图上的下一个。我们解决了 我认为大多数人会真正喜欢的用于关联的 API。你 可以在以下位置查看正在进行的工作和建议的 API:[Proposed Sails 关联 API][1]。

接下来我们将处理关联和交易,并希望 让他们在下个月左右准备好。

同时,如果您使用的是 MySQL 或 PostgreSQL 适配器 它们都公开了一个原始的.query() 方法,该方法允许您传入一个 手工构建的sql查询并执行。我完全意识到这一点 不理想,但应该允许您继续构建您的应用程序,同时 我们得到了对关联和加入的支持。

查询方法的函数签名是:

Model.query(<sql query>, <optional data>, callback);

【讨论】:

  • 在哪里可以找到Model.query 方法的文档?
  • 如果自定义实例方法在使用 model.query 方法时仍然可用,那就太好了。我假设因为 Model.query 方法接受任意 sql,所以与模型保持同步变得更加困难?
  • 因为它接受任何我们不知道我们要返回的集合数据的东西。您应该能够通过执行以下操作来实例化新模型实例:var instance = User._model(values)
  • 是否可以使用sails 0.10.0-rc7 版加入多个表?
  • 如何在查询中添加参数,我想可以用 可以吗?
【解决方案2】:

粒子香蕉中的示例有效,但实际上应该使用“新”,如“var instance = new User._model(values)”。我正在使用以下代码,它可以工作。

Accounts.query(query, function(err, accounts) {
  if (err)
    return fn(err);

  accounts = _.map(accounts, function(account) {
    return new Accounts._model(account);
  });

  fn(null, accounts);
});

【讨论】:

  • 这不是阻止声明吗?您必须等待 _.map 完成才能继续。在 Node 上,最好使用类似 async.js:github.com/caolan/async 的东西来完全消除阻塞代码。
  • new Accounts._model() 中没有执行 I/O,因此它不是阻塞的,并且不会从异步中获得任何收益。
猜你喜欢
  • 2014-10-17
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
  • 2019-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多