2014-11-16 2 views
8

그래서이 응용 프로그램을 만들고 레스토랑에 맞는 메뉴 항목을 만듭니다.SailsJS를 사용하여 한 번에 여러 레코드 업데이트

소유자는 메뉴 항목

을 이동 할 수있는 능력을 가지고 있어야이 내 menuitem.js 모델이

이름, 가격, 위치 그것 뿐이다

포함되어 있습니다. 슈퍼 간단합니다.

그래서 그래서 최종 제품이 매우 유사 무언가가있을 것 JQuery와 UI 를 사용합니다 이러한 요소의 위치를 ​​변경하기>http://jqueryui.com/sortable/

그래서 내 목표는 모든 데이터베이스에서 이러한 각 메뉴 항목의 위치를 ​​저장하는 것입니다 하나의 메뉴 항목이 변경되었습니다. 그래서 내가 생각 항해 크게

는 또한 SailsJS에 문제를 열었다 감사 어떤 도움이 될 것

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'); 
      } 
     }); 

아래에 한 번

처럼 모든 레코드를 업데이트 할 수있는 기능이 있어야합니다 https://github.com/balderdashy/sails/issues/2404

+0

워터 라인 대신 몽구스를 사용하면이 기능을 사용할 수 있지만 워터 라인을 사용하지 않으면 의사를 확인해야합니다. 수상 선은 돛에 사용되는 "ORM"입니다. – Vadorequest

+0

도움이되지 않는 친구. 죄송합니다. –

+0

Btw, 돛에 대한 질문은 문제, 버그 및 기타 문제가 많은 github 대신 https://groups.google.com/forum/#!forum/sailsjs에서 작성됩니다. 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; 

당연히이 2, 4, 동적 공급을 받고 또한 사용자가 위 또는 아래로 객체를 이동 여부를 처리해야하기 때문에 쿼리가 더 복잡한 보일 수 있습니다. 그러나 이것이 당신이 이것을 성취 할 수있는 방법입니다. 보다 복잡한 논리를 실행해야하는 경우 저장 프로 시저를 만들 수도 있습니다. Model.query를 사용하여 실행됩니다. 최종 사용자가 제공 한 매개 변수를 사용하여 동적 쿼리를 작성하는 동안 SQL 주입 공격을 조심하십시오.

관련 문제