sails.js - 使用 SailsJS 一次更新多条记录

标签 sails.js waterline

所以我正在制作这个应用程序,我将在其中为餐厅提供菜单项,对吗?

所有者应该能够移动菜单项

这是我的 menuitem.js 模型包含

名称、价格、位置

就是这样。 super 简单。

所以要重新定位这些元素,我将使用 jquery UI
所以最终产品将与此非常相似 > http://jqueryui.com/sortable/

所以我的目标是在每次更改菜单项时将每个菜单项的位置保存在数据库中。所以我认为 Sails 必须有一个可以一次更新所有记录的功能

像下面

Menuitem.update([{id: 1},{position: 3}], [{id: 2},{position: 3}] ).exec(function(err, updatedRecords) {
            if (err) {
                return res.send({message: 'Could not update the records', err: err}, 500);
            }

            if (updatedRecords) {
                return res.send({ records: updatedRecords }, 200);
            } else {
                return res.notFound('Records not found');
            }
        });

任何帮助将不胜感激

还在 SailsJS 上打开了一个问题
https://github.com/balderdashy/sails/issues/2404

最佳答案

您可以使用 native SQL 查询来实现此目的。要执行原生 SQL 查询,您需要使用水线的 Model.query() 函数。在您的情况下,它将是这样的。

var myQuery = "update menuitem set ....   complete SQL query goes here ";

Menuitem.query(myQuery, function (err, result){
  if(err){
    // error handling here
  }
  else{
    // do something with result here
  }
});

现在,对于您的 native SQL 查询,您可以使用 case 语句根据位置值更新行。例如,如果我将项目从位置 4 移动到位置 2,那么我的查询将是这样的。
update menuitem
set position = case when position = 4 then 2
               when position >=2 then position + 1 
               else position end;

当然,4 和 2 将动态提供,您的查询可能看起来更复杂,因为您还需要处理用户是向上还是向下移动对象。但这就是您可以实现这一目标的方法。如果你需要执行更复杂的逻辑,你也可以创建一个存储过程。这也将通过使用 Model.query 来执行。使用最终用户提供的参数构建动态查询时,请注意 SQL 注入(inject)攻击。

关于sails.js - 使用 SailsJS 一次更新多条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26952705/

相关文章:

node.js - 在 Sails.JS 中持久化之前添加缺少的请求参数

sails.js - 如何使用 Treeline 创建新的服务器端 View ?

javascript - 无法向现有模型 sails.js 添加新属性

node.js - Sails 拒绝与 sails-postgresql 模块的 PostgreSQL 连接

javascript - SailsJS : Requiring Assets, 例如 sails.io.js

node.js - 如何将 Elasticsearch 与 sails 集成

node.js - 在 Sails 应用程序中,Mongoose 是否优于水线?

mysql - WaterlineJS 对多个属性的唯一性约束

node.js - 使用 Postgres 数据库设置 Sails JS 应用程序

node.js - 如何在 Waterline 中执行 COUNT 和 GROUP BY?