2014-11-16 37 views
8

所以我正在製作這個應用程序,我將有一個餐廳的菜單項嗎?使用SailsJS一次更新多個記錄

所有者應具有在菜單選項中

移動的能力這是我menuitem.js模型包含

名稱,價格,位置

就是這樣。超級簡單。

所以要重新定位這些元素,我將使用jQuery UI的 所以最終的產品將是非常類似的東西這個>http://jqueryui.com/sortable/

所以我的目標是保存數據庫的每個菜單項的位置,每時間之一的菜單項已被更改。所以我想揚帆必須有一個可以一次

像更新下

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

+0

使用貓鼬代替水線,我知道我有這個能力,但我不使用水線,你應該檢查文檔。水線是風帆使用的「ORM」。 – Vadorequest

+0

沒有幫助的朋友。對不起 –

+0

順便說一句,關於風帆的問題通常寫在https://groups.google.com/forum/#!forum/sailsjs,而不是github,這更多的是問題,錯誤等等。我只是覺得你可以在GoogleGroups上得到比github更快的答案,只是說。 – Vadorequest

回答

0

您可以使用原生SQL查詢來實現此目的。要執行本機SQL查詢,您需要使用waterline的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; 

Ofcourse,4和2將被動態地提供和您的查詢可能更復雜,因爲你還需要處理用戶是否正在移動的物體向上或向下。但這是你如何實現這一目標的。如果你需要執行更復雜的邏輯,你也可以創建一個存儲過程。這也將通過使用Model.query來執行。使用最終用戶提供的參數構建動態查詢時,請注意SQL注入攻擊。

相關問題