【问题标题】:Update multiple records at once using SailsJS使用 SailsJS 一次更新多条记录
【发布时间】:2015-01-13 04:26:43
【问题描述】:

所以我正在制作这个应用程序,其中包含餐厅的菜单项,对吧?

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

这是我的 menuitem.js 模型包含

名称、价格、位置

就是这样。超级简单。

所以要重新定位这些元素,我将使用 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

【问题讨论】:

  • 用猫鼬代替水线,我知道我有这个能力,但我不使用水线,你应该检查文档。 Waterline 是帆使用的“ORM”。
  • 没有帮助的哥们。对不起
  • 顺便说一句,有关风帆的问题通常写在groups.google.com/forum/#!forum/sailsjs,而不是 github,后者更多地用于问题、错误等。我只是认为您可以在 GoogleGroups 上获得比 g​​ithub 更快的答案,只是说。
  • 试用过 Google 群组。到目前为止没有任何帮助
  • 似乎您需要为此使用本机查询。你的底层数据库是什么?

标签: sails.js waterline


【解决方案1】:

您可以使用本机 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
  }
});

现在,对于您的原生 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 注入攻击。

【讨论】:

    猜你喜欢
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    相关资源
    最近更新 更多