所以我正在制作这个应用程序,我将在其中为餐厅提供菜单项,对吗?
所有者应该能够移动菜单项
这是我的菜单项.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
您可以使用本机 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 注入攻击。