2013-10-07 6 views
8

Sequelizejs를 사용하면 개체 자체가 저장 될 때 개체 연결을 저장하는 방법이없는 것처럼 보입니다.Sequelizejs에 연결이있는 개체 저장

예를 들어 하나 이상의 phoneNumber를 가질 수있는 연락처가 있습니다.

global.db.Contact.hasMany(global.db.PhoneNumber, {as: 'phoneNumbers'}); 

내가 (모든 제공된 전화 번호와 함께) 새 연락처 개체를 게시하고 데이터베이스에 저장하고 싶은 나머지 엔드 포인트를 사용 : 현재 내가 협회에 대해이 같은 있습니다.

var contact = Contact.build(req.body); 

을 그리고 내가 저장/대신 빌드의 생성 사용할 수 있습니다 알고 있지만 우리는이 (저장 전화 :

{ 
    firstName: "john", 
    lastName: "Doe", 
    phoneNumbers: [ 
     { number: "555-555-5555", type: "home" } 
    ] 
} 

가 지금 내가 구축이 개체를 전달할 : 내 요청 객체는 다음과 같이 보입니다 수정 된 데이터를 추적하기위한 저장의 사용자 정의 논리 및 수정 한 사용자)

contact.save(); 

이렇게하면 다음과 같은 오류가 발생합니다.

column "phoneNumbers" of relation "Contacts" does not exist 

sql 호출이 존재하지 않는 "phoneNumbers"열의 값을 설정하려고합니다. 분명히 그렇게하고 싶지는 않습니다 ... 나는 만들고있는 연락처 ID로 배열의 각 phoneNumber를 대량으로 생성하고 싶습니다.

내가 발견 한 유일한 예는 다음과 같습니다. https://gist.github.com/sdepold/3040391 그리고 저는 이것을 정말로하고 싶지 않습니다 ... 휴식 종점에서 왔기 때문에이 작업을 일반적으로 할 수있는 방법을 원합니다. 협회가있는 여러 모델이 있음). 또한이 작업을 일괄 처리 (다른 소스에서 연락처 가져 오기) 할 수 있어야하므로 SQL 호출이 최소화되는 것이 좋습니다. 누구든지 좋은 방법을 찾았습니까?

+0

나는 똑같은 질문을 가지고있다. 이것에 대한 답을 찾았습니까? 나는 여전히 1.7의 후유증을 앓고있다. – optimusPrime

+0

나는 우아한 해결책을 찾지 못했습니다. 이후 Sequelize를 사용하지 않는 다른 프로젝트로 옮겼습니다. – Nova706

답변

1

나는 사용자가 hasMany의 사용자 그룹이

  • req.payload는 JSON에게 제공되는 모델이다

    var createUser = function(req, reply) { 
        db.User.create(req.payload).success(function(user) { 
         saveGroups(req, reply, user); 
        }).error(function(err) { 
         console.error('Error occured', err); 
         reply('Error'); 
        }); 
    }; 
    
    var saveGroups = function(req, reply, user) { 
        db.UserGroup.destroy("user_id=" + user.id).success(function() { 
         var groups = req.payload.userGroups; 
         if (groups && groups.length > 0) { 
          for (var i = 0; i < groups.length; i++) { 
           groups[i].user_id = user.id; 
          } 
          db.UserGroup.bulkCreate(groups).success(function() { 
           reply(user); 
          }).error(function(err) { 
           console.error('Error occured', err); 
           reply('Error'); 
          }); 
         } else { 
          reply(user); 
         } 
        }).error(function(err) { 
         console.error('Error occured', err); 
         reply('Error'); 
        }); 
    }; 
    
    • 이 코드를 사용
    • 소멸 (...)이 먼저 연결을 비울 (우리가 업데이트를 할 경우)